<?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>11474</bug_id>
          
          <creation_ts>2006-10-31 15:23:43 -0800</creation_ts>
          <short_desc>Rename the &quot;p&quot; member variable of the PaintInfo struct to &quot;context&quot;</short_desc>
          <delta_ts>2006-11-01 14:08:14 -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>WebCore Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>48262</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-10-31 15:23:43 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>48270</commentid>
    <comment_count>1</comment_count>
      <attachid>11314</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-10-31 16:19:52 -0800</bug_when>
    <thetext>Created attachment 11314
patch

Patch renames the &apos;p&apos; member to &apos;context&apos; and the &apos;r&apos; member to &apos;rect&apos;.  No changelog has been to added yet as while I was making the patch several changes were made to near by rendering code that I will have to account for.  I&apos;ll get an updated patch up asap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>47701</commentid>
    <comment_count>2</comment_count>
      <attachid>11314</attachid>
    <who name="">mitz</who>
    <bug_when>2006-11-01 04:19:48 -0800</bug_when>
    <thetext>Comment on attachment 11314
patch

Wow! Very few comments:

This can be replaced with &apos;RenderStyle* style = m_object-&gt;style(m_firstLine)&apos;:

+    RenderStyle* style = m_firstLine ? m_object-&gt;firstLineStyle() : m_object-&gt;style();

This is not equivalent and probably wrong:

-    if (inlineFlow)
-        ASSERT(m_layer); // The only way a compact/run-in/inline could paint like this is if it has a layer.
+    ASSERT(inlineFlow &amp;&amp; m_layer); // The only way a compact/run-in/inline could paint like this is if it has a layer.

(the above change appears twice in the patch)

You didn&apos;t change this, but I don&apos;t understand why you need to round trip through RGBA:

+        context-&gt;setFillColor(color.rgb());

+        context-&gt;setFillColor(color.rgb());

This multi-line for loop could use braces:

             for (RenderObject* child = firstChild(); child; child = child-&gt;nextSibling())
                 if (child-&gt;isTableSection())
-                    child-&gt;paint(paintInfo, _tx, _ty);
+                    child-&gt;paint(info, tx, ty);

Missing space before the =:

+        mh= max(0, h - (paintInfo.rect.y() - ty));

For consistency (within this patch, at least) the || should go on the end of the first line:

-    if (i.phase == PaintPhaseCollapsedTableBorders &amp;&amp; style()-&gt;visibility() == VISIBLE) {
-        if (_ty - table()-&gt;outerBorderTop() &gt;= i.r.bottom() + os || _ty + _topExtra + m_height + _bottomExtra + table()-&gt;outerBorderBottom() &lt;= i.r.y() - os)
+    if (paintInfo.phase == PaintPhaseCollapsedTableBorders &amp;&amp; style()-&gt;visibility() == VISIBLE) {
+        if (ty - table()-&gt;outerBorderTop() &gt;= paintInfo.rect.bottom() + os
+                || ty + _topExtra + m_height + _bottomExtra + table()-&gt;outerBorderBottom() &lt;= paintInfo.rect.y() - os)

I think the Pen() is redundant here:

+    paintInfo.context-&gt;setPen(Pen(o-&gt;style()-&gt;color()));

+    paintInfo.context-&gt;setPen(Pen(leftSeparatorColor));

+    paintInfo.context-&gt;setPen(Pen(rightSeparatorColor));

No need for the last semicolon:

+    virtual bool isWidget() const { return true; };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>47463</commentid>
    <comment_count>3</comment_count>
      <attachid>11327</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-11-01 08:09:44 -0800</bug_when>
    <thetext>Created attachment 11327
updated patch

The updated patch addresses Mitz&apos;s concerns, is updated for the current ToT, and adds a ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>47466</commentid>
    <comment_count>4</comment_count>
      <attachid>11327</attachid>
    <who name="">mitz</who>
    <bug_when>2006-11-01 08:27:16 -0800</bug_when>
    <thetext>Comment on attachment 11327
updated patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>47495</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-11-01 14:08:14 -0800</bug_when>
    <thetext>Landed in r17521.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11314</attachid>
            <date>2006-10-31 16:19:52 -0800</date>
            <delta_ts>2006-11-01 08:09:44 -0800</delta_ts>
            <desc>patch</desc>
            <filename>paintInfoPatch.diff</filename>
            <type>text/plain</type>
            <size>198115</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHJldmlzaW9uIDE3NDQ3KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwzNSAr
MjksMzUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEVsbGlwc2lzQm94OjpwYWlu
dChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSkKK3ZvaWQgRWxs
aXBzaXNCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0
eCwgaW50IHR5KQogewotICAgIEdyYXBoaWNzQ29udGV4dCogcCA9IGkucDsKLSAgICBSZW5kZXJT
dHlsZSogX3N0eWxlID0gbV9maXJzdExpbmUgPyBtX29iamVjdC0+Zmlyc3RMaW5lU3R5bGUoKSA6
IG1fb2JqZWN0LT5zdHlsZSgpOwotICAgIGlmIChfc3R5bGUtPmZvbnQoKSAhPSBwLT5mb250KCkp
Ci0gICAgICAgIHAtPnNldEZvbnQoX3N0eWxlLT5mb250KCkpOwotCi0gICAgQ29sb3IgdGV4dENv
bG9yID0gX3N0eWxlLT5jb2xvcigpOwotICAgIGlmICh0ZXh0Q29sb3IgIT0gcC0+cGVuKCkuY29s
b3IoKSkKLSAgICAgICAgcC0+c2V0UGVuKHRleHRDb2xvcik7CisgICAgR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
bV9maXJzdExpbmUgPyBtX29iamVjdC0+Zmlyc3RMaW5lU3R5bGUoKSA6IG1fb2JqZWN0LT5zdHls
ZSgpOworICAgIGlmIChzdHlsZS0+Zm9udCgpICE9IGNvbnRleHQtPmZvbnQoKSkKKyAgICAgICAg
Y29udGV4dC0+c2V0Rm9udChzdHlsZS0+Zm9udCgpKTsKKworICAgIENvbG9yIHRleHRDb2xvciA9
IHN0eWxlLT5jb2xvcigpOworICAgIGlmICh0ZXh0Q29sb3IgIT0gY29udGV4dC0+cGVuKCkuY29s
b3IoKSkKKyAgICAgICAgY29udGV4dC0+c2V0UGVuKHRleHRDb2xvcik7CiAgICAgYm9vbCBzZXRT
aGFkb3cgPSBmYWxzZTsKLSAgICBpZiAoX3N0eWxlLT50ZXh0U2hhZG93KCkpIHsKLSAgICAgICAg
cC0+c2V0U2hhZG93KEludFNpemUoX3N0eWxlLT50ZXh0U2hhZG93KCktPngsIF9zdHlsZS0+dGV4
dFNoYWRvdygpLT55KSwKLSAgICAgICAgICAgICAgICAgICAgIF9zdHlsZS0+dGV4dFNoYWRvdygp
LT5ibHVyLCBfc3R5bGUtPnRleHRTaGFkb3coKS0+Y29sb3IpOworICAgIGlmIChzdHlsZS0+dGV4
dFNoYWRvdygpKSB7CisgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhJbnRTaXplKHN0eWxlLT50
ZXh0U2hhZG93KCktPngsIHN0eWxlLT50ZXh0U2hhZG93KCktPnkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3R5bGUtPnRleHRTaGFkb3coKS0+Ymx1ciwgc3R5bGUtPnRleHRTaGFkb3co
KS0+Y29sb3IpOwogICAgICAgICBzZXRTaGFkb3cgPSB0cnVlOwogICAgIH0KIAogICAgIGNvbnN0
IFN0cmluZyYgc3RyID0gbV9zdHI7Ci0gICAgVGV4dFN0eWxlIHRleHRTdHlsZSgwLCAwLCAwLCBm
YWxzZSwgX3N0eWxlLT52aXN1YWxseU9yZGVyZWQoKSk7Ci0gICAgcC0+ZHJhd1RleHQoVGV4dFJ1
bihzdHIuaW1wbCgpKSwgSW50UG9pbnQobV94ICsgX3R4LCBtX3kgKyBfdHkgKyBtX2Jhc2VsaW5l
KSwgdGV4dFN0eWxlKTsKKyAgICBUZXh0U3R5bGUgdGV4dFN0eWxlKDAsIDAsIDAsIGZhbHNlLCBz
dHlsZS0+dmlzdWFsbHlPcmRlcmVkKCkpOworICAgIGNvbnRleHQtPmRyYXdUZXh0KFRleHRSdW4o
c3RyLmltcGwoKSksIEludFBvaW50KG1feCArIHR4LCBtX3kgKyB0eSArIG1fYmFzZWxpbmUpLCB0
ZXh0U3R5bGUpOwogCiAgICAgaWYgKHNldFNoYWRvdykKLSAgICAgICAgcC0+Y2xlYXJTaGFkb3co
KTsKKyAgICAgICAgY29udGV4dC0+Y2xlYXJTaGFkb3coKTsKIAogICAgIGlmIChtX21hcmt1cEJv
eCkgewogICAgICAgICAvLyBQYWludCB0aGUgbWFya3VwIGJveAotICAgICAgICBfdHggKz0gbV94
ICsgbV93aWR0aCAtIG1fbWFya3VwQm94LT54UG9zKCk7Ci0gICAgICAgIF90eSArPSBtX3kgKyBt
X2Jhc2VsaW5lIC0gKG1fbWFya3VwQm94LT55UG9zKCkgKyBtX21hcmt1cEJveC0+YmFzZWxpbmUo
KSk7Ci0gICAgICAgIG1fbWFya3VwQm94LT5wYWludChpLCBfdHgsIF90eSk7CisgICAgICAgIHR4
ICs9IG1feCArIG1fd2lkdGggLSBtX21hcmt1cEJveC0+eFBvcygpOworICAgICAgICB0eSArPSBt
X3kgKyBtX2Jhc2VsaW5lIC0gKG1fbWFya3VwQm94LT55UG9zKCkgKyBtX21hcmt1cEJveC0+YmFz
ZWxpbmUoKSk7CisgICAgICAgIG1fbWFya3VwQm94LT5wYWludChwYWludEluZm8sIHR4LCB0eSk7
CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgJKHJldmlzaW9uIDE3NDQ3
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaAkod29ya2luZyBjb3B5KQpAQCAt
MTksOCArMTksOCBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAotI2lm
bmRlZiBFbGxpcHNpc0JveF9ICi0jZGVmaW5lIEVsbGlwc2lzQm94X0gKKyNpZm5kZWYgRWxsaXBz
aXNCb3hfaAorI2RlZmluZSBFbGxpcHNpc0JveF9oCiAKICNpbmNsdWRlICJJbmxpbmVCb3guaCIK
IApAQCAtMzcsOSArMzcsOSBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9tYXJrdXBCb3gobWFya3Vw
Qm94KQogICAgIHsKICAgICB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHBhaW50KFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiwgaW50IF90eCwgaW50IF90eSk7Ci0gICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KEhpdFRlc3RSZXN1bHQmLCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90
eSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBp
bnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KEhpdFRlc3RSZXN1
bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5KTsKIAogcHJpdmF0ZToKICAgICBBdG9t
aWNTdHJpbmcgbV9zdHI7CkBAIC00OCw0ICs0OCw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIEVsbGlwc2lzQm94X0gKKyNlbmRpZiAvLyBFbGxpcHNp
c0JveF9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAJKHJldmlzaW9uIDE3NDQ3KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDE3
ICsxMjUsMTcgQEAgdm9pZCBJbmxpbmVCb3g6OmFkanVzdFBvc2l0aW9uKGludCBkeCwgaQogICAg
ICAgICBtX29iamVjdC0+c2V0UG9zKG1fb2JqZWN0LT54UG9zKCkgKyBkeCwgbV9vYmplY3QtPnlQ
b3MoKSArIGR5KTsKIH0KIAotdm9pZCBJbmxpbmVCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBpLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgSW5saW5lQm94OjpwYWludChSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICBpZiAo
IW9iamVjdCgpLT5zaG91bGRQYWludFdpdGhpblJvb3QoaSkgfHwgKGkucGhhc2UgIT0gUGFpbnRQ
aGFzZUZvcmVncm91bmQgJiYgaS5waGFzZSAhPSBQYWludFBoYXNlU2VsZWN0aW9uKSkKKyAgICBp
ZiAoIW9iamVjdCgpLT5zaG91bGRQYWludFdpdGhpblJvb3QocGFpbnRJbmZvKSB8fCAocGFpbnRJ
bmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kICYmIHBhaW50SW5mby5waGFzZSAhPSBQ
YWludFBoYXNlU2VsZWN0aW9uKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gUGFpbnQgYWxs
IHBoYXNlcyBvZiByZXBsYWNlZCBlbGVtZW50cyBhdG9taWNhbGx5LCBhcyB0aG91Z2ggdGhlIHJl
cGxhY2VkIGVsZW1lbnQgZXN0YWJsaXNoZWQgaXRzCiAgICAgLy8gb3duIHN0YWNraW5nIGNvbnRl
eHQuICAoU2VlIEFwcGVuZGl4IEUuMiwgc2VjdGlvbiA2LjQgb24gaW5saW5lIGJsb2NrL3RhYmxl
IGVsZW1lbnRzIGluIHRoZSBDU1MyLjEKICAgICAvLyBzcGVjaWZpY2F0aW9uLikKLSAgICBib29s
IHBhaW50U2VsZWN0aW9uT25seSA9IGkucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbjsKLSAg
ICBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyBpbmZvKGkpOwotICAgIGluZm8ucGhhc2UgPSBwYWlu
dFNlbGVjdGlvbk9ubHkgPyBpLnBoYXNlIDogUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZDsKKyAg
ICBib29sIHBhaW50U2VsZWN0aW9uT25seSA9IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNl
U2VsZWN0aW9uOworICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIGluZm8ocGFpbnRJbmZvKTsK
KyAgICBpbmZvLnBoYXNlID0gcGFpbnRTZWxlY3Rpb25Pbmx5ID8gcGFpbnRJbmZvLnBoYXNlIDog
UGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZDsKICAgICBvYmplY3QoKS0+cGFpbnQoaW5mbywgdHgs
IHR5KTsKICAgICBpZiAoIXBhaW50U2VsZWN0aW9uT25seSkgewogICAgICAgICBpbmZvLnBoYXNl
ID0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kczsKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxNzQ0NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDMsMzIgKzU0MywzMCBAQCBib29s
IElubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50KEhpdFRlc3RSCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIElubGluZUZsb3dCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBp
LCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnQoUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgaW50IHhQb3Mg
PSB0eCArIG1feCAtIG9iamVjdCgpLT5tYXhpbWFsT3V0bGluZVNpemUoaS5waGFzZSk7Ci0gICAg
aW50IHcgPSB3aWR0aCgpICsgMiAqIG9iamVjdCgpLT5tYXhpbWFsT3V0bGluZVNpemUoaS5waGFz
ZSk7Ci0gICAgYm9vbCBpbnRlcnNlY3RzRGFtYWdlUmVjdCA9IHhQb3MgPCBpLnIucmlnaHQoKSAm
JiB4UG9zICsgdyA+IGkuci54KCk7Ci0gICAgCi0gICAgaWYgKGludGVyc2VjdHNEYW1hZ2VSZWN0
ICYmIGkucGhhc2UgIT0gUGFpbnRQaGFzZUNoaWxkT3V0bGluZXMpIHsKLSAgICAgICAgaWYgKGku
cGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgaS5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91
dGxpbmUpIHsKKyAgICBpbnQgeFBvcyA9IHR4ICsgbV94IC0gb2JqZWN0KCktPm1heGltYWxPdXRs
aW5lU2l6ZShwYWludEluZm8ucGhhc2UpOworICAgIGludCB3ID0gd2lkdGgoKSArIDIgKiBvYmpl
Y3QoKS0+bWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSk7CisgICAgYm9vbCBpbnRl
cnNlY3RzRGFtYWdlUmVjdCA9IHhQb3MgPCBwYWludEluZm8ucmVjdC5yaWdodCgpICYmIHhQb3Mg
KyB3ID4gcGFpbnRJbmZvLnJlY3QueCgpOworCisgICAgaWYgKGludGVyc2VjdHNEYW1hZ2VSZWN0
ICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lcykgeworICAgICAg
ICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IHBhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpIHsKICAgICAgICAgICAgIC8vIEFkZCBvdXJz
ZWx2ZXMgdG8gdGhlIHBhaW50IGluZm8gc3RydWN0J3MgbGlzdCBvZiBpbmxpbmVzIHRoYXQgbmVl
ZCB0byBwYWludCB0aGVpcgogICAgICAgICAgICAgLy8gb3V0bGluZXMuCiAgICAgICAgICAgICBp
ZiAob2JqZWN0KCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmIG9iamVjdCgp
LT5oYXNPdXRsaW5lKCkgJiYKLSAgICAgICAgICAgICAgICAhb2JqZWN0KCktPmlzSW5saW5lQ29u
dGludWF0aW9uKCkgJiYgIWlzUm9vdElubGluZUJveCgpKSB7Ci0gICAgICAgICAgICAgICAgaS5v
dXRsaW5lT2JqZWN0cy0+YWRkKGZsb3dPYmplY3QoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICFvYmplY3QoKS0+aXNJbmxp
bmVDb250aW51YXRpb24oKSAmJiAhaXNSb290SW5saW5lQm94KCkpCisgICAgICAgICAgICAgICAg
cGFpbnRJbmZvLm91dGxpbmVPYmplY3RzLT5hZGQoZmxvd09iamVjdCgpKTsKKyAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIC8vIDEuIFBhaW50IG91ciBiYWNrZ3JvdW5kIGFuZCBib3JkZXIu
Ci0gICAgICAgICAgICBwYWludEJhY2tncm91bmRBbmRCb3JkZXIoaSwgdHgsIHR5KTsKLSAgICAg
ICAgICAgIAorICAgICAgICAgICAgcGFpbnRCYWNrZ3JvdW5kQW5kQm9yZGVyKHBhaW50SW5mbywg
dHgsIHR5KTsKKwogICAgICAgICAgICAgLy8gMi4gUGFpbnQgb3VyIHVuZGVybGluZSBhbmQgb3Zl
cmxpbmUuCi0gICAgICAgICAgICBwYWludERlY29yYXRpb25zKGksIHR4LCB0eSwgZmFsc2UpOwor
ICAgICAgICAgICAgcGFpbnREZWNvcmF0aW9ucyhwYWludEluZm8sIHR4LCB0eSwgZmFsc2UpOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgUGFpbnRQaGFzZSBwYWludFBoYXNlID0gaS5waGFzZSA9
PSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lcyA/IFBhaW50UGhhc2VPdXRsaW5lIDogaS5waGFzZTsK
LSAgICBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyBjaGlsZEluZm8oaSk7CisgICAgUGFpbnRQaGFz
ZSBwYWludFBoYXNlID0gcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VDaGlsZE91dGxpbmVz
ID8gUGFpbnRQaGFzZU91dGxpbmUgOiBwYWludEluZm8ucGhhc2U7CisgICAgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8gY2hpbGRJbmZvKHBhaW50SW5mbyk7CiAgICAgY2hpbGRJbmZvLnBoYXNlID0g
cGFpbnRQaGFzZTsKIAogICAgIC8vIDMuIFBhaW50IG91ciBjaGlsZHJlbi4KQEAgLTU4MCw4ICs1
NzgsOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6CiAgICAgfQog
CiAgICAgLy8gNC4gUGFpbnQgb3VyIHN0cmlrZS10aHJvdWdoCi0gICAgaWYgKGludGVyc2VjdHNE
YW1hZ2VSZWN0ICYmIChpLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IGkucGhhc2Ug
PT0gUGFpbnRQaGFzZVNlbGVjdGlvbikpCi0gICAgICAgIHBhaW50RGVjb3JhdGlvbnMoaSwgdHgs
IHR5LCB0cnVlKTsKKyAgICBpZiAoaW50ZXJzZWN0c0RhbWFnZVJlY3QgJiYgKHBhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZVNlbGVjdGlvbikpCisgICAgICAgIHBhaW50RGVjb3JhdGlvbnMocGFpbnRJbmZvLCB0eCwg
dHksIHRydWUpOwogfQogCiB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50QmFja2dyb3VuZHMoR3Jh
cGhpY3NDb250ZXh0KiBwLCBjb25zdCBDb2xvciYgYywgY29uc3QgQmFja2dyb3VuZExheWVyKiBi
Z0xheWVyLApAQCAtNTkzLDEzICs1OTEsMTMgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJh
Y2tncm91bmRzKEdyYQogICAgIHBhaW50QmFja2dyb3VuZChwLCBjLCBiZ0xheWVyLCBteSwgbWgs
IF90eCwgX3R5LCB3LCBoKTsKIH0KIAotdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJhY2tncm91
bmQoR3JhcGhpY3NDb250ZXh0KiBwLCBjb25zdCBDb2xvciYgYywgY29uc3QgQmFja2dyb3VuZExh
eWVyKiBiZ0xheWVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG15
LCBpbnQgbWgsIGludCBfdHgsIGludCBfdHksIGludCB3LCBpbnQgaCkKK3ZvaWQgSW5saW5lRmxv
d0JveDo6cGFpbnRCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgQ29s
b3ImIGMsIGNvbnN0IEJhY2tncm91bmRMYXllciogYmdMYXllciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBteSwgaW50IG1oLCBpbnQgdHgsIGludCB0eSwgaW50IHcs
IGludCBoKQogewogICAgIENhY2hlZEltYWdlKiBiZyA9IGJnTGF5ZXItPmJhY2tncm91bmRJbWFn
ZSgpOwogICAgIGJvb2wgaGFzQmFja2dyb3VuZEltYWdlID0gYmcgJiYgYmctPmNhblJlbmRlcigp
OwogICAgIGlmICghaGFzQmFja2dyb3VuZEltYWdlIHx8ICghcHJldkxpbmVCb3goKSAmJiAhbmV4
dExpbmVCb3goKSkgfHwgIXBhcmVudCgpKQotICAgICAgICBvYmplY3QoKS0+cGFpbnRCYWNrZ3Jv
dW5kRXh0ZW5kZWQocCwgYywgYmdMYXllciwgbXksIG1oLCBfdHgsIF90eSwgdywgaCwgCisgICAg
ICAgIG9iamVjdCgpLT5wYWludEJhY2tncm91bmRFeHRlbmRlZChjb250ZXh0LCBjLCBiZ0xheWVy
LCBteSwgbWgsIHR4LCB0eSwgdywgaCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib3JkZXJMZWZ0KCksIGJvcmRlclJpZ2h0KCksIHBhZGRpbmdMZWZ0KCksIHBh
ZGRpbmdSaWdodCgpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gV2UgaGF2ZSBhIGJhY2tncm91
bmQgaW1hZ2UgdGhhdCBzcGFucyBtdWx0aXBsZSBsaW5lcy4KQEAgLTYxMyw0NyArNjExLDQ3IEBA
IHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnRCYWNrZ3JvdW5kKEdyYXAKICAgICAgICAgaW50IHhP
ZmZzZXRPbkxpbmUgPSAwOwogICAgICAgICBmb3IgKElubGluZVJ1bkJveCogY3VyciA9IHByZXZM
aW5lQm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wcmV2TGluZUJveCgpKQogICAgICAgICAgICAg
eE9mZnNldE9uTGluZSArPSBjdXJyLT53aWR0aCgpOwotICAgICAgICBpbnQgc3RhcnRYID0gX3R4
IC0geE9mZnNldE9uTGluZTsKKyAgICAgICAgaW50IHN0YXJ0WCA9IHR4IC0geE9mZnNldE9uTGlu
ZTsKICAgICAgICAgaW50IHRvdGFsV2lkdGggPSB4T2Zmc2V0T25MaW5lOwogICAgICAgICBmb3Ig
KElubGluZVJ1bkJveCogY3VyciA9IHRoaXM7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJv
eCgpKQogICAgICAgICAgICAgdG90YWxXaWR0aCArPSBjdXJyLT53aWR0aCgpOwotICAgICAgICBw
LT5zYXZlKCk7Ci0gICAgICAgIHAtPmNsaXAoSW50UmVjdChfdHgsIF90eSwgd2lkdGgoKSwgaGVp
Z2h0KCkpKTsKLSAgICAgICAgb2JqZWN0KCktPnBhaW50QmFja2dyb3VuZEV4dGVuZGVkKHAsIGMs
IGJnTGF5ZXIsIG15LCBtaCwgc3RhcnRYLCBfdHksCisgICAgICAgIGNvbnRleHQtPnNhdmUoKTsK
KyAgICAgICAgY29udGV4dC0+Y2xpcChJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkp
KTsKKyAgICAgICAgb2JqZWN0KCktPnBhaW50QmFja2dyb3VuZEV4dGVuZGVkKGNvbnRleHQsIGMs
IGJnTGF5ZXIsIG15LCBtaCwgc3RhcnRYLCB0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRvdGFsV2lkdGgsIGgsIGJvcmRlckxlZnQoKSwgYm9yZGVyUmlnaHQo
KSwgcGFkZGluZ0xlZnQoKSwgcGFkZGluZ1JpZ2h0KCkpOwotICAgICAgICBwLT5yZXN0b3JlKCk7
CisgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKICAgICB9CiB9CiAKLXZvaWQgSW5saW5lRmxv
d0JveDo6cGFpbnRCYWNrZ3JvdW5kQW5kQm9yZGVyKFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBp
LCBpbnQgX3R4LCBpbnQgX3R5KQordm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJhY2tncm91bmRB
bmRCb3JkZXIoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQg
dHkpCiB7Ci0gICAgaWYgKCFvYmplY3QoKS0+c2hvdWxkUGFpbnRXaXRoaW5Sb290KGkpIHx8IG9i
amVjdCgpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fAotICAgICAgICBpLnBo
YXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQorICAgIGlmICghb2JqZWN0KCktPnNob3VsZFBh
aW50V2l0aGluUm9vdChwYWludEluZm8pIHx8IG9iamVjdCgpLT5zdHlsZSgpLT52aXNpYmlsaXR5
KCkgIT0gVklTSUJMRSB8fAorICAgICAgICAgICAgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhh
c2VGb3JlZ3JvdW5kKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBNb3ZlIHgveSB0byBvdXIg
Y29vcmRpbmF0ZXMuCi0gICAgX3R4ICs9IG1feDsKLSAgICBfdHkgKz0gbV95OworICAgIHR4ICs9
IG1feDsKKyAgICB0eSArPSBtX3k7CiAgICAgCiAgICAgaW50IHcgPSB3aWR0aCgpOwogICAgIGlu
dCBoID0gaGVpZ2h0KCk7CiAKLSAgICBpbnQgbXkgPSBtYXgoX3R5LCBpLnIueSgpKTsKKyAgICBp
bnQgbXkgPSBtYXgodHksIHBhaW50SW5mby5yZWN0LnkoKSk7CiAgICAgaW50IG1oOwotICAgIGlm
IChfdHkgPCBpLnIueSgpKQotICAgICAgICBtaCA9IG1heCgwLCBoIC0gKGkuci55KCkgLSBfdHkp
KTsKKyAgICBpZiAodHkgPCBwYWludEluZm8ucmVjdC55KCkpCisgICAgICAgIG1oID0gbWF4KDAs
IGggLSAocGFpbnRJbmZvLnJlY3QueSgpIC0gdHkpKTsKICAgICBlbHNlCi0gICAgICAgIG1oID0g
bWluKGkuci5oZWlnaHQoKSwgaCk7CisgICAgICAgIG1oID0gbWluKHBhaW50SW5mby5yZWN0Lmhl
aWdodCgpLCBoKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogcCA9IGkucDsKKyAgICBHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsKICAgICAKICAgICAvLyBZb3Ug
Y2FuIHVzZSBwOjpmaXJzdC1saW5lIHRvIHNwZWNpZnkgYSBiYWNrZ3JvdW5kLiBJZiBzbywgdGhl
IHJvb3QgbGluZSBib3hlcyBmb3IKICAgICAvLyBhIGxpbmUgbWF5IGFjdHVhbGx5IGhhdmUgdG8g
cGFpbnQgYSBiYWNrZ3JvdW5kLgogICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gb2JqZWN0
KCktPnN0eWxlKG1fZmlyc3RMaW5lKTsKICAgICBpZiAoKCFwYXJlbnQoKSAmJiBtX2ZpcnN0TGlu
ZSAmJiBzdHlsZVRvVXNlICE9IG9iamVjdCgpLT5zdHlsZSgpKSB8fCAKLSAgICAgICAgKHBhcmVu
dCgpICYmIG9iamVjdCgpLT5zaG91bGRQYWludEJhY2tncm91bmRPckJvcmRlcigpKSkgeworICAg
ICAgICAgICAgKHBhcmVudCgpICYmIG9iamVjdCgpLT5zaG91bGRQYWludEJhY2tncm91bmRPckJv
cmRlcigpKSkgewogICAgICAgICBDb2xvciBjID0gc3R5bGVUb1VzZS0+YmFja2dyb3VuZENvbG9y
KCk7Ci0gICAgICAgIHBhaW50QmFja2dyb3VuZHMocCwgYywgc3R5bGVUb1VzZS0+YmFja2dyb3Vu
ZExheWVycygpLCBteSwgbWgsIF90eCwgX3R5LCB3LCBoKTsKKyAgICAgICAgcGFpbnRCYWNrZ3Jv
dW5kcyhjb250ZXh0LCBjLCBzdHlsZVRvVXNlLT5iYWNrZ3JvdW5kTGF5ZXJzKCksIG15LCBtaCwg
dHgsIHR5LCB3LCBoKTsKIAogICAgICAgICAvLyA6Zmlyc3QtbGluZSBjYW5ub3QgYmUgdXNlZCB0
byBwdXQgYm9yZGVycyBvbiBhIGxpbmUuIEFsd2F5cyBwYWludCBib3JkZXJzIHdpdGggb3VyCiAg
ICAgICAgIC8vIG5vbi1maXJzdC1saW5lIHN0eWxlLgpAQCAtNjYyLDExICs2NjAsMTEgQEAgdm9p
ZCBJbmxpbmVGbG93Qm94OjpwYWludEJhY2tncm91bmRBbmRCbwogICAgICAgICAgICAgYm9vbCBo
YXNCb3JkZXJJbWFnZSA9IGJvcmRlckltYWdlICYmIGJvcmRlckltYWdlLT5jYW5SZW5kZXIoKTsK
ICAgICAgICAgICAgIGlmIChoYXNCb3JkZXJJbWFnZSAmJiAhYm9yZGVySW1hZ2UtPmlzTG9hZGVk
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBEb24ndCBwYWludCBhbnl0aGluZyB3aGls
ZSB3ZSB3YWl0IGZvciB0aGUgaW1hZ2UgdG8gbG9hZC4KLSAgICAgICAgICAgIAorCiAgICAgICAg
ICAgICAvLyBUaGUgc2ltcGxlIGNhc2UgaXMgd2hlcmUgd2UgZWl0aGVyIGhhdmUgbm8gYm9yZGVy
IGltYWdlIG9yIHdlIGFyZSB0aGUgb25seSBib3ggZm9yIHRoaXMgb2JqZWN0LiAgSW4gdGhvc2UK
ICAgICAgICAgICAgIC8vIGNhc2VzIG9ubHkgYSBzaW5nbGUgY2FsbCB0byBkcmF3IGlzIHJlcXVp
cmVkLgogICAgICAgICAgICAgaWYgKCFoYXNCb3JkZXJJbWFnZSB8fCAoIXByZXZMaW5lQm94KCkg
JiYgIW5leHRMaW5lQm94KCkpKQotICAgICAgICAgICAgICAgIG9iamVjdCgpLT5wYWludEJvcmRl
cihwLCBfdHgsIF90eSwgdywgaCwgb2JqZWN0KCktPnN0eWxlKCksIGluY2x1ZGVMZWZ0RWRnZSgp
LCBpbmNsdWRlUmlnaHRFZGdlKCkpOworICAgICAgICAgICAgICAgIG9iamVjdCgpLT5wYWludEJv
cmRlcihjb250ZXh0LCB0eCwgdHksIHcsIGgsIG9iamVjdCgpLT5zdHlsZSgpLCBpbmNsdWRlTGVm
dEVkZ2UoKSwgaW5jbHVkZVJpZ2h0RWRnZSgpKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgICAgIC8vIFdlIGhhdmUgYSBib3JkZXIgaW1hZ2UgdGhhdCBzcGFucyBtdWx0aXBsZSBs
aW5lcy4KICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCBfdHggYW5kIF90eSBi
eSB0aGUgd2lkdGggb2YgYWxsIHByZXZpb3VzIGxpbmVzLgpAQCAtNjc5LDE0ICs2NzcsMTQgQEAg
dm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJhY2tncm91bmRBbmRCbwogICAgICAgICAgICAgICAg
IGludCB4T2Zmc2V0T25MaW5lID0gMDsKICAgICAgICAgICAgICAgICBmb3IgKElubGluZVJ1bkJv
eCogY3VyciA9IHByZXZMaW5lQm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wcmV2TGluZUJveCgp
KQogICAgICAgICAgICAgICAgICAgICB4T2Zmc2V0T25MaW5lICs9IGN1cnItPndpZHRoKCk7Ci0g
ICAgICAgICAgICAgICAgaW50IHN0YXJ0WCA9IF90eCAtIHhPZmZzZXRPbkxpbmU7CisgICAgICAg
ICAgICAgICAgaW50IHN0YXJ0WCA9IHR4IC0geE9mZnNldE9uTGluZTsKICAgICAgICAgICAgICAg
ICBpbnQgdG90YWxXaWR0aCA9IHhPZmZzZXRPbkxpbmU7CiAgICAgICAgICAgICAgICAgZm9yIChJ
bmxpbmVSdW5Cb3gqIGN1cnIgPSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3go
KSkKICAgICAgICAgICAgICAgICAgICAgdG90YWxXaWR0aCArPSBjdXJyLT53aWR0aCgpOwotICAg
ICAgICAgICAgICAgIHAtPnNhdmUoKTsKLSAgICAgICAgICAgICAgICBwLT5jbGlwKEludFJlY3Qo
X3R4LCBfdHksIHdpZHRoKCksIGhlaWdodCgpKSk7Ci0gICAgICAgICAgICAgICAgb2JqZWN0KCkt
PnBhaW50Qm9yZGVyKHAsIHN0YXJ0WCwgX3R5LCB0b3RhbFdpZHRoLCBoLCBvYmplY3QoKS0+c3R5
bGUoKSk7Ci0gICAgICAgICAgICAgICAgcC0+cmVzdG9yZSgpOworICAgICAgICAgICAgICAgIGNv
bnRleHQtPnNhdmUoKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5jbGlwKEludFJlY3QodHgs
IHR5LCB3aWR0aCgpLCBoZWlnaHQoKSkpOworICAgICAgICAgICAgICAgIG9iamVjdCgpLT5wYWlu
dEJvcmRlcihjb250ZXh0LCBzdGFydFgsIHR5LCB0b3RhbFdpZHRoLCBoLCBvYmplY3QoKS0+c3R5
bGUoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQpAQCAtNzEyLDIxICs3MTAsMjEgQEAgc3RhdGljIGJvb2wgc2hv
dWxkRHJhd0RlY29yYXRpb24oUmVuZGVyTwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBJ
bmxpbmVGbG93Qm94OjpwYWludERlY29yYXRpb25zKFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBp
LCBpbnQgX3R4LCBpbnQgX3R5LCBib29sIHBhaW50ZWRDaGlsZHJlbikKK3ZvaWQgSW5saW5lRmxv
d0JveDo6cGFpbnREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZv
LCBpbnQgdHgsIGludCB0eSwgYm9vbCBwYWludGVkQ2hpbGRyZW4pCiB7CiAgICAgLy8gUGFpbnQg
dGV4dCBkZWNvcmF0aW9ucyBsaWtlIHVuZGVybGluZXMvb3ZlcmxpbmVzLiBXZSBvbmx5IGRvIHRo
aXMgaWYgd2UgYXJlbid0IGluIHF1aXJrcyBtb2RlIChpLmUuLCBpbgogICAgIC8vIGFsbW9zdC1z
dHJpY3QgbW9kZSBvciBzdHJpY3QgbW9kZSkuCi0gICAgaWYgKG9iamVjdCgpLT5zdHlsZSgpLT5o
dG1sSGFja3MoKSB8fCAhb2JqZWN0KCktPnNob3VsZFBhaW50V2l0aGluUm9vdChpKSB8fAotICAg
ICAgICBvYmplY3QoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCisgICAgaWYg
KG9iamVjdCgpLT5zdHlsZSgpLT5odG1sSGFja3MoKSB8fCAhb2JqZWN0KCktPnNob3VsZFBhaW50
V2l0aGluUm9vdChwYWludEluZm8pIHx8CisgICAgICAgICAgICBvYmplY3QoKS0+c3R5bGUoKS0+
dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICAvLyBX
ZSBkb24ndCB3YW50IHVuZGVybGluZXMgb3Igb3RoZXIgZGVjb3JhdGlvbnMgd2hlbiB3ZSdyZSB0
cnlpbmcgdG8gZHJhdyBub3RoaW5nIGJ1dCB0aGUgc2VsZWN0aW9uIGFzIHdoaXRlIHRleHQuCi0g
ICAgaWYgKGkucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiBpLmZvcmNlV2hpdGVUZXh0
KQorICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiBwYWlu
dEluZm8uZm9yY2VXaGl0ZVRleHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdyYXBoaWNzQ29u
dGV4dCogcCA9IGkucDsKLSAgICBfdHggKz0gbV94OwotICAgIF90eSArPSBtX3k7CisgICAgR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CisgICAgdHggKz0gbV94
OworICAgIHR5ICs9IG1feTsKICAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IG9iamVjdCgp
LT5zdHlsZShtX2ZpcnN0TGluZSk7CiAgICAgaW50IGRlY28gPSBwYXJlbnQoKSA/IHN0eWxlVG9V
c2UtPnRleHREZWNvcmF0aW9uKCkgOiBzdHlsZVRvVXNlLT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVj
dCgpOwogICAgIGlmIChkZWNvICE9IFRETk9ORSAmJiAKQEAgLTc0Myw1MSArNzQxLDUwIEBAIHZv
aWQgSW5saW5lRmxvd0JveDo6cGFpbnREZWNvcmF0aW9ucyhSZW4KICAgICAgICAgICAgIGlmIChy
b290TGluZSA9PSB0aGlzKSB7CiAgICAgICAgICAgICAgICAgaWYgKHggKyB3ID49IGVsbGlwc2lz
WCArIGVsbGlwc2lzV2lkdGgpCiAgICAgICAgICAgICAgICAgICAgIHcgLT0gKHggKyB3IC0gZWxs
aXBzaXNYIC0gZWxsaXBzaXNXaWR0aCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKHggPj0gZWxsaXBz
aXNYKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgaWYgKHgg
KyB3ID49IGVsbGlwc2lzWCkKICAgICAgICAgICAgICAgICAgICAgdyAtPSAoeCArIHcgLSBlbGxp
cHNpc1gpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAg
ICAvLyBTZXQgdXAgdGhlIGFwcHJvcHJpYXRlIHRleHQtc2hhZG93IGVmZmVjdCBmb3IgdGhlIGRl
Y29yYXRpb24uCiAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IG11bHRpcGxlIHNoYWRvdyBlZmZl
Y3RzLiAgTmVlZCBtb3JlIGZyb20gdGhlIENHIEFQSSBiZWZvcmUgd2UgY2FuIGRvIHRoaXMuCiAg
ICAgICAgIGJvb2wgc2V0U2hhZG93ID0gZmFsc2U7CiAgICAgICAgIGlmIChzdHlsZVRvVXNlLT50
ZXh0U2hhZG93KCkpIHsKLSAgICAgICAgICAgIHAtPnNldFNoYWRvdyhJbnRTaXplKHN0eWxlVG9V
c2UtPnRleHRTaGFkb3coKS0+eCwgc3R5bGVUb1VzZS0+dGV4dFNoYWRvdygpLT55KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHlsZVRvVXNlLT50ZXh0U2hhZG93KCktPmJsdXIsIHN0eWxl
VG9Vc2UtPnRleHRTaGFkb3coKS0+Y29sb3IpOworICAgICAgICAgICAgY29udGV4dC0+c2V0U2hh
ZG93KEludFNpemUoc3R5bGVUb1VzZS0+dGV4dFNoYWRvdygpLT54LCBzdHlsZVRvVXNlLT50ZXh0
U2hhZG93KCktPnkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlVG9Vc2Ut
PnRleHRTaGFkb3coKS0+Ymx1ciwgc3R5bGVUb1VzZS0+dGV4dFNoYWRvdygpLT5jb2xvcik7CiAg
ICAgICAgICAgICBzZXRTaGFkb3cgPSB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAg
ICAgIC8vIFdlIG11c3QgaGF2ZSBjaGlsZCBib3hlcyBhbmQgaGF2ZSBkZWNvcmF0aW9ucyBkZWZp
bmVkLgotICAgICAgICBfdHggKz0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKLSAgICAg
ICAgCisgICAgICAgIHR4ICs9IGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCk7CisKICAgICAg
ICAgQ29sb3IgdW5kZXJsaW5lLCBvdmVybGluZSwgbGluZXRocm91Z2g7CiAgICAgICAgIHVuZGVy
bGluZSA9IG92ZXJsaW5lID0gbGluZXRocm91Z2ggPSBzdHlsZVRvVXNlLT5jb2xvcigpOwogICAg
ICAgICBpZiAoIXBhcmVudCgpKQogICAgICAgICAgICAgb2JqZWN0KCktPmdldFRleHREZWNvcmF0
aW9uQ29sb3JzKGRlY28sIHVuZGVybGluZSwgb3ZlcmxpbmUsIGxpbmV0aHJvdWdoKTsKIAotICAg
ICAgICBpZiAoc3R5bGVUb1VzZS0+Zm9udCgpICE9IHAtPmZvbnQoKSkKLSAgICAgICAgICAgIHAt
PnNldEZvbnQoc3R5bGVUb1VzZS0+Zm9udCgpKTsKKyAgICAgICAgaWYgKHN0eWxlVG9Vc2UtPmZv
bnQoKSAhPSBjb250ZXh0LT5mb250KCkpCisgICAgICAgICAgICBjb250ZXh0LT5zZXRGb250KHN0
eWxlVG9Vc2UtPmZvbnQoKSk7CiAKICAgICAgICAgYm9vbCBpc1ByaW50aW5nID0gb2JqZWN0KCkt
PmRvY3VtZW50KCktPnByaW50aW5nKCk7CiAgICAgICAgIGlmIChkZWNvICYgVU5ERVJMSU5FICYm
ICFwYWludGVkQ2hpbGRyZW4pIHsKLSAgICAgICAgICAgIHAtPnNldFBlbih1bmRlcmxpbmUpOwot
ICAgICAgICAgICAgcC0+ZHJhd0xpbmVGb3JUZXh0KEludFBvaW50KF90eCwgX3R5KSwgbV9iYXNl
bGluZSwgdywgaXNQcmludGluZyk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRQZW4odW5kZXJs
aW5lKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdMaW5lRm9yVGV4dChJbnRQb2ludCh0eCwg
dHkpLCBtX2Jhc2VsaW5lLCB3LCBpc1ByaW50aW5nKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
ZGVjbyAmIE9WRVJMSU5FICYmICFwYWludGVkQ2hpbGRyZW4pIHsKLSAgICAgICAgICAgIHAtPnNl
dFBlbihvdmVybGluZSk7Ci0gICAgICAgICAgICBwLT5kcmF3TGluZUZvclRleHQoSW50UG9pbnQo
X3R4LCBfdHkpLCAwLCB3LCBpc1ByaW50aW5nKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNldFBl
bihvdmVybGluZSk7CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3TGluZUZvclRleHQoSW50UG9p
bnQodHgsIHR5KSwgMCwgdywgaXNQcmludGluZyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGRl
Y28gJiBMSU5FX1RIUk9VR0ggJiYgcGFpbnRlZENoaWxkcmVuKSB7Ci0gICAgICAgICAgICBwLT5z
ZXRQZW4obGluZXRocm91Z2gpOwotICAgICAgICAgICAgcC0+ZHJhd0xpbmVGb3JUZXh0KEludFBv
aW50KF90eCwgX3R5KSwgMiptX2Jhc2VsaW5lLzMsIHcsIGlzUHJpbnRpbmcpOworICAgICAgICAg
ICAgY29udGV4dC0+c2V0UGVuKGxpbmV0aHJvdWdoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRy
YXdMaW5lRm9yVGV4dChJbnRQb2ludCh0eCwgdHkpLCAyICogbV9iYXNlbGluZSAvIDMsIHcsIGlz
UHJpbnRpbmcpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHNldFNoYWRvdykKLSAgICAgICAg
ICAgIHAtPmNsZWFyU2hhZG93KCk7CisgICAgICAgICAgICBjb250ZXh0LT5jbGVhclNoYWRvdygp
OwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkocmV2aXNpb24g
MTc0NDcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcyLDE0ICs3MiwxNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJU
cnVuY2F0aW9uKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCYWNrZ3JvdW5kQW5kQm9yZGVy
KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KTsKLSAgICB2b2lk
IHBhaW50QmFja2dyb3VuZHMoR3JhcGhpY3NDb250ZXh0KiBwLCBjb25zdCBDb2xvciYgYywgY29u
c3QgQmFja2dyb3VuZExheWVyKiBiZ0xheWVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgbXksIGludCBtaCwgaW50IF90eCwgaW50IF90eSwgaW50IHcsIGludCBoKTsKLSAgICB2b2lk
IHBhaW50QmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIHAsIGNvbnN0IENvbG9yJiBjLCBjb25z
dCBCYWNrZ3JvdW5kTGF5ZXIqIGJnTGF5ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50
IG15LCBpbnQgbWgsIGludCBfdHgsIGludCBfdHksIGludCB3LCBpbnQgaCk7Ci0gICAgdmlydHVh
bCB2b2lkIHBhaW50RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGludCBf
dHgsIGludCBfdHksIGJvb2wgcGFpbnRlZENoaWxkcmVuID0gZmFsc2UpOwotICAgIHZpcnR1YWwg
dm9pZCBwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSk7
Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KEhpdFRlc3RSZXN1bHQmLCBpbnQsIGludCwg
aW50LCBpbnQpOworICAgIHZpcnR1YWwgdm9pZCBwYWludEJhY2tncm91bmRBbmRCb3JkZXIoUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdm9pZCBwYWludEJh
Y2tncm91bmRzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IENvbG9yJiwgY29uc3QgQmFja2dyb3Vu
ZExheWVyKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG15LCBpbnQgbWgsIGludCB0
eCwgaW50IHR5LCBpbnQgdywgaW50IGgpOworICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IENvbG9yJiwgY29uc3QgQmFja2dyb3VuZExheWVyKiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgbXksIGludCBtaCwgaW50IHR4LCBpbnQgdHksIGludCB3
LCBpbnQgaCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSwgYm9vbCBwYWludGVkQ2hpbGRyZW4gPSBmYWxz
ZSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgaW50
IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChIaXRUZXN0UmVzdWx0
JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSk7CiAKICAgICBpbnQgbWFyZ2luQm9yZGVy
UGFkZGluZ0xlZnQoKTsKICAgICBpbnQgbWFyZ2luQm9yZGVyUGFkZGluZ1JpZ2h0KCk7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVSdW5Cb3guaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVSdW5Cb3guaAkocmV2aXNpb24gMTc0NDcpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVSdW5Cb3guaAkod29ya2luZyBjb3B5KQpAQCAtMjAsOCArMjAsOCBAQAog
ICoKICAqLwogCi0jaWZuZGVmIElubGluZVJ1bkJveF9ICi0jZGVmaW5lIElubGluZVJ1bkJveF9I
CisjaWZuZGVmIElubGluZVJ1bkJveF9oCisjZGVmaW5lIElubGluZVJ1bkJveF9oCiAKICNpbmNs
dWRlICJJbmxpbmVCb3guaCIKIApAQCAtNTEsNCArNTEsNCBAQCBwcm90ZWN0ZWQ6CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIElubGluZVJ1bkJveF9ICisjZW5kaWYgLy8g
SW5saW5lUnVuQm94X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZp
c2lvbiAxNzQ0NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzMsMjkgKzIzMywyOSBAQCBib29sIElubGluZVRleHRCb3g6Om5vZGVB
dFBvaW50KEhpdFRlc3RSCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIElubGluZVRleHRC
b3g6OnBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgdHgsIGludCB0eSkKK3Zv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5m
bywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgaWYgKGlzTGluZUJyZWFrKCkgfHwgIW9iamVjdCgp
LT5zaG91bGRQYWludFdpdGhpblJvb3QoaSkgfHwgb2JqZWN0KCktPnN0eWxlKCktPnZpc2liaWxp
dHkoKSAhPSBWSVNJQkxFIHx8Ci0gICAgICAgIG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRydW5jYXRp
b24gfHwgaS5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSkKKyAgICBpZiAoaXNMaW5lQnJlYWso
KSB8fCAhb2JqZWN0KCktPnNob3VsZFBhaW50V2l0aGluUm9vdChwYWludEluZm8pIHx8IG9iamVj
dCgpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fAorICAgICAgICAgICAgbV90
cnVuY2F0aW9uID09IGNGdWxsVHJ1bmNhdGlvbiB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZU91dGxpbmUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhc3NlcnQoaS5waGFzZSAh
PSBQYWludFBoYXNlU2VsZk91dGxpbmUgJiYgaS5waGFzZSAhPSBQYWludFBoYXNlQ2hpbGRPdXRs
aW5lcyk7CisgICAgQVNTRVJUKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlU2VsZk91dGxp
bmUgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzKTsKIAogICAg
IGludCB4UG9zID0gdHggKyBtX3ggLSBwYXJlbnQoKS0+bWF4SG9yaXpvbnRhbFNoYWRvdygpOwog
ICAgIGludCB3ID0gd2lkdGgoKSArIDIgKiBwYXJlbnQoKS0+bWF4SG9yaXpvbnRhbFNoYWRvdygp
OwotICAgIGlmICh4UG9zID49IGkuci5yaWdodCgpIHx8IHhQb3MgKyB3IDw9IGkuci54KCkpCisg
ICAgaWYgKHhQb3MgPj0gcGFpbnRJbmZvLnJlY3QucmlnaHQoKSB8fCB4UG9zICsgdyA8PSBwYWlu
dEluZm8ucmVjdC54KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgaXNQcmludGluZyA9
IHRleHRPYmplY3QoKS0+ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKTsKICAgICAKICAgICAvLyBEZXRl
cm1pbmUgd2hldGhlciBvciBub3Qgd2UncmUgc2VsZWN0ZWQuCiAgICAgYm9vbCBoYXZlU2VsZWN0
aW9uID0gIWlzUHJpbnRpbmcgJiYgc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNl
bGVjdGlvbk5vbmU7Ci0gICAgaWYgKCFoYXZlU2VsZWN0aW9uICYmIGkucGhhc2UgPT0gUGFpbnRQ
aGFzZVNlbGVjdGlvbikKKyAgICBpZiAoIWhhdmVTZWxlY3Rpb24gJiYgcGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2VTZWxlY3Rpb24pCiAgICAgICAgIC8vIFdoZW4gb25seSBwYWludGluZyB0
aGUgc2VsZWN0aW9uLCBkb24ndCBib3RoZXIgdG8gcGFpbnQgaWYgdGhlcmUgaXMgbm9uZS4KICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlIGhhdmUg
bWFya2VkIHRleHQuCi0gICAgUmFuZ2UgKm1hcmtlZFRleHRSYW5nZSA9IG9iamVjdCgpLT5kb2N1
bWVudCgpLT5mcmFtZSgpLT5tYXJrZWRUZXh0UmFuZ2UoKTsKKyAgICBSYW5nZSogbWFya2VkVGV4
dFJhbmdlID0gb2JqZWN0KCktPmRvY3VtZW50KCktPmZyYW1lKCktPm1hcmtlZFRleHRSYW5nZSgp
OwogICAgIGludCBleGNlcHRpb24gPSAwOwogICAgIGJvb2wgaGF2ZU1hcmtlZFRleHQgPSBtYXJr
ZWRUZXh0UmFuZ2UgJiYgbWFya2VkVGV4dFJhbmdlLT5zdGFydENvbnRhaW5lcihleGNlcHRpb24p
ID09IG9iamVjdCgpLT5ub2RlKCk7CiAgICAgYm9vbCBtYXJrZWRUZXh0VXNlc1VuZGVybGluZXMg
PSBvYmplY3QoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bWFya2VkVGV4dFVzZXNVbmRlcmxpbmVz
KCk7CkBAIC0yNjQsMzAgKzI2NCwzMSBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFJlbmRl
ck9iamVjdDo6CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBvYmplY3QoKS0+c3R5bGUo
bV9maXJzdExpbmUpOwogICAgIGludCBkID0gc3R5bGVUb1VzZS0+dGV4dERlY29yYXRpb25zSW5F
ZmZlY3QoKTsKICAgICBjb25zdCBGb250KiBmb250ID0gJnN0eWxlVG9Vc2UtPmZvbnQoKTsKLSAg
ICBpZiAoKmZvbnQgIT0gaS5wLT5mb250KCkpCi0gICAgICAgIGkucC0+c2V0Rm9udCgqZm9udCk7
CisgICAgaWYgKCpmb250ICE9IHBhaW50SW5mby5jb250ZXh0LT5mb250KCkpCisgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT5zZXRGb250KCpmb250KTsKIAogICAgIC8vIDEuIFBhaW50IGJhY2tn
cm91bmRzIGJlaGluZCB0ZXh0IGlmIG5lZWRlZC4gIEV4YW1wbGVzIG9mIHN1Y2ggYmFja2dyb3Vu
ZHMgaW5jbHVkZSBzZWxlY3Rpb24KICAgICAvLyBhbmQgbWFya2VkIHRleHQuCi0gICAgaWYgKGku
cGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiAhaXNQcmludGluZykgeworICAgIGlmIChw
YWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiAhaXNQcmludGluZykgewog
I2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgLy8gQ3VzdG9tIGhpZ2hsaWdodGVycyBnbyBiZWhp
bmQgZXZlcnl0aGluZyBlbHNlLgotICAgICAgICBpZiAoc3R5bGVUb1VzZS0+aGlnaGxpZ2h0KCkg
IT0gbnVsbEF0b20gJiYgIWkucC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBpZiAoc3R5
bGVUb1VzZS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0b20gJiYgIXBhaW50SW5mby5jb250ZXh0LT5w
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdodCh0eCwg
dHksIHN0eWxlVG9Vc2UtPmhpZ2hsaWdodCgpKTsKICNlbmRpZgogCiAgICAgICAgIGlmIChoYXZl
TWFya2VkVGV4dCAgJiYgIW1hcmtlZFRleHRVc2VzVW5kZXJsaW5lcykKLSAgICAgICAgICAgIHBh
aW50TWFya2VkVGV4dEJhY2tncm91bmQoaS5wLCB0eCwgdHksIHN0eWxlVG9Vc2UsIGZvbnQsIG1h
cmtlZFRleHRSYW5nZS0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwgbWFya2VkVGV4dFJhbmdlLT5l
bmRPZmZzZXQoZXhjZXB0aW9uKSk7CisgICAgICAgICAgICBwYWludE1hcmtlZFRleHRCYWNrZ3Jv
dW5kKHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHN0eWxlVG9Vc2UsIGZvbnQsIG1hcmtlZFRl
eHRSYW5nZS0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwgbWFya2VkVGV4dFJhbmdlLT5lbmRPZmZz
ZXQoZXhjZXB0aW9uKSk7CiAKLSAgICAgICAgcGFpbnREb2N1bWVudE1hcmtlcnMoaS5wLCB0eCwg
dHksIHN0eWxlVG9Vc2UsIGZvbnQsIHRydWUpOworICAgICAgICBwYWludERvY3VtZW50TWFya2Vy
cyhwYWludEluZm8uY29udGV4dCwgdHgsIHR5LCBzdHlsZVRvVXNlLCBmb250LCB0cnVlKTsKIAog
ICAgICAgICBpZiAoaGF2ZVNlbGVjdGlvbikKLSAgICAgICAgICAgIHBhaW50U2VsZWN0aW9uKGku
cCwgdHgsIHR5LCBzdHlsZVRvVXNlLCBmb250KTsKKyAgICAgICAgICAgIHBhaW50U2VsZWN0aW9u
KHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHN0eWxlVG9Vc2UsIGZvbnQpOwogICAgIH0KLSAg
ICAKKwogICAgIC8vIDIuIE5vdyBwYWludCB0aGUgZm9yZWdyb3VuZCwgaW5jbHVkaW5nIHRleHQg
YW5kIGRlY29yYXRpb25zIGxpa2UgdW5kZXJsaW5lL292ZXJsaW5lIChpbiBxdWlya3MgbW9kZSBv
bmx5KS4KLSAgICBpZiAobV9sZW4gPD0gMCkgcmV0dXJuOwotICAgIAorICAgIGlmIChtX2xlbiA8
PSAwKQorICAgICAgICByZXR1cm47CisKICAgICBjb25zdCBWZWN0b3I8TWFya2VkVGV4dFVuZGVy
bGluZT4qIHVuZGVybGluZXMgPSAwOwogICAgIHNpemVfdCBudW1VbmRlcmxpbmVzID0gMDsKICAg
ICBpZiAoaGF2ZU1hcmtlZFRleHQgJiYgbWFya2VkVGV4dFVzZXNVbmRlcmxpbmVzKSB7CkBAIC0y
OTYsOCArMjk3LDggQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChSZW5kZXJPYmplY3Q6Ogog
ICAgIH0KIAogICAgIENvbG9yIHRleHRDb2xvcjsKLSAgICAKLSAgICBpZiAoaS5mb3JjZVdoaXRl
VGV4dCkKKworICAgIGlmIChwYWludEluZm8uZm9yY2VXaGl0ZVRleHQpCiAgICAgICAgIHRleHRD
b2xvciA9IENvbG9yOjp3aGl0ZTsKICAgICBlbHNlIHsKICAgICAgICAgdGV4dENvbG9yID0gc3R5
bGVUb1VzZS0+Y29sb3IoKTsKQEAgLTMwNywyMyArMzA4LDIzIEBAIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnQoUmVuZGVyT2JqZWN0OjoKICAgICAgICAgICAgIHRleHRDb2xvciA9IGNvcnJlY3Rl
ZFRleHRDb2xvcih0ZXh0Q29sb3IsIENvbG9yOjp3aGl0ZSk7CiAgICAgfQogCi0gICAgaWYgKHRl
eHRDb2xvciAhPSBpLnAtPnBlbigpLmNvbG9yKCkpCi0gICAgICAgIGkucC0+c2V0UGVuKHRleHRD
b2xvcik7CisgICAgaWYgKHRleHRDb2xvciAhPSBwYWludEluZm8uY29udGV4dC0+cGVuKCkuY29s
b3IoKSkKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFBlbih0ZXh0Q29sb3IpOwogCiAg
ICAgLy8gU2V0IGEgdGV4dCBzaGFkb3cgaWYgd2UgaGF2ZSBvbmUuCiAgICAgLy8gRklYTUU6IFN1
cHBvcnQgbXVsdGlwbGUgc2hhZG93IGVmZmVjdHMuICBOZWVkIG1vcmUgZnJvbSB0aGUgQ0cgQVBJ
IGJlZm9yZQogICAgIC8vIHdlIGNhbiBkbyB0aGlzLgogICAgIGJvb2wgc2V0U2hhZG93ID0gZmFs
c2U7CiAgICAgaWYgKHN0eWxlVG9Vc2UtPnRleHRTaGFkb3coKSkgewotICAgICAgICBpLnAtPnNl
dFNoYWRvdyhJbnRTaXplKHN0eWxlVG9Vc2UtPnRleHRTaGFkb3coKS0+eCwgc3R5bGVUb1VzZS0+
dGV4dFNoYWRvdygpLT55KSwKLSAgICAgICAgICAgIHN0eWxlVG9Vc2UtPnRleHRTaGFkb3coKS0+
Ymx1ciwgc3R5bGVUb1VzZS0+dGV4dFNoYWRvdygpLT5jb2xvcik7CisgICAgICAgIHBhaW50SW5m
by5jb250ZXh0LT5zZXRTaGFkb3coSW50U2l6ZShzdHlsZVRvVXNlLT50ZXh0U2hhZG93KCktPngs
IHN0eWxlVG9Vc2UtPnRleHRTaGFkb3coKS0+eSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3R5bGVUb1VzZS0+dGV4dFNoYWRvdygpLT5ibHVyLCBzdHlsZVRvVXNlLT50
ZXh0U2hhZG93KCktPmNvbG9yKTsKICAgICAgICAgc2V0U2hhZG93ID0gdHJ1ZTsKICAgICB9CiAK
LSAgICBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSA9IChpLnBoYXNlID09IFBhaW50UGhhc2VT
ZWxlY3Rpb24pOworICAgIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5ID0gKHBhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKTsKICAgICBib29sIHBhaW50U2VsZWN0ZWRUZXh0
U2VwYXJhdGVseSA9IGZhbHNlOyAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBoYXZlIHRvIGRvIG11bHRp
cGxlIHBhaW50cy4gIE9ubHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBuZWNlc3Nhcnkgd2hlbiBhIGN1c3RvbSA6OnNlbGVjdGlvbiBmb3JlZ3JvdW5k
IGNvbG9yIGlzIGFwcGxpZWQuCi0gICAgQ29sb3Igc2VsZWN0aW9uQ29sb3IgPSBpLnAtPnBlbigp
LmNvbG9yKCk7CisgICAgQ29sb3Igc2VsZWN0aW9uQ29sb3IgPSBwYWludEluZm8uY29udGV4dC0+
cGVuKCkuY29sb3IoKTsKICAgICBTaGFkb3dEYXRhKiBzZWxlY3Rpb25UZXh0U2hhZG93ID0gMDsK
ICAgICBpZiAoaGF2ZVNlbGVjdGlvbikgewogICAgICAgICAvLyBDaGVjayBmb3JlZ3JvdW5kIGNv
bG9yIGZpcnN0LgpAQCAtMzUzLDQ1ICszNTQsNDQgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWlu
dChSZW5kZXJPYmplY3Q6OgogICAgICAgICBpbnQgZW5kUG9pbnQgPSBtX2xlbjsKICAgICAgICAg
aWYgKG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uKQogICAgICAgICAgICAgZW5kUG9pbnQg
PSBtX3RydW5jYXRpb24gLSBtX3N0YXJ0OwotICAgICAgICBpLnAtPmRyYXdUZXh0KFRleHRSdW4o
dGV4dFN0ciwgbV9zdGFydCwgZW5kUG9pbnQpLCBJbnRQb2ludChtX3ggKyB0eCwgbV95ICsgdHkg
KyBtX2Jhc2VsaW5lKSwgdGV4dFN0eWxlKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRy
YXdUZXh0KFRleHRSdW4odGV4dFN0ciwgbV9zdGFydCwgZW5kUG9pbnQpLCBJbnRQb2ludChtX3gg
KyB0eCwgbV95ICsgdHkgKyBtX2Jhc2VsaW5lKSwgdGV4dFN0eWxlKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBpbnQgc1BvcywgZVBvczsKICAgICAgICAgc2VsZWN0aW9uU3RhcnRFbmQoc1Bvcywg
ZVBvcyk7CiAgICAgICAgIGlmIChwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHkpIHsKICAgICAg
ICAgICAgIC8vIHBhaW50IG9ubHkgdGhlIHRleHQgdGhhdCBpcyBub3Qgc2VsZWN0ZWQKICAgICAg
ICAgICAgIGlmIChzUG9zID49IGVQb3MpCi0gICAgICAgICAgICAgICAgaS5wLT5kcmF3VGV4dChU
ZXh0UnVuKHRleHRTdHIsIG1fc3RhcnQsIG1fbGVuKSwgSW50UG9pbnQobV94ICsgdHgsIG1feSAr
IHR5ICsgbV9iYXNlbGluZSksIHRleHRTdHlsZSk7CisgICAgICAgICAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPmRyYXdUZXh0KFRleHRSdW4odGV4dFN0ciwgbV9zdGFydCwgbV9sZW4pLCBJbnRQ
b2ludChtX3ggKyB0eCwgbV95ICsgdHkgKyBtX2Jhc2VsaW5lKSwgdGV4dFN0eWxlKTsKICAgICAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChzUG9zIC0gMSA+PSAwKQotICAgICAg
ICAgICAgICAgICAgICBpLnAtPmRyYXdUZXh0KFRleHRSdW4odGV4dFN0ciwgbV9zdGFydCwgbV9s
ZW4sIDAsIHNQb3MpLCBJbnRQb2ludChtX3ggKyB0eCwgbV95ICsgdHkgKyBtX2Jhc2VsaW5lKSwg
dGV4dFN0eWxlKTsKKyAgICAgICAgICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdU
ZXh0KFRleHRSdW4odGV4dFN0ciwgbV9zdGFydCwgbV9sZW4sIDAsIHNQb3MpLCBJbnRQb2ludCht
X3ggKyB0eCwgbV95ICsgdHkgKyBtX2Jhc2VsaW5lKSwgdGV4dFN0eWxlKTsKICAgICAgICAgICAg
ICAgICBpZiAoZVBvcyA8IG1fc3RhcnQgKyBtX2xlbikKLSAgICAgICAgICAgICAgICAgICAgaS5w
LT5kcmF3VGV4dChUZXh0UnVuKHRleHRTdHIsIG1fc3RhcnQsIG1fbGVuLCBlUG9zKSwgSW50UG9p
bnQobV94ICsgdHgsIG1feSArIHR5ICsgbV9iYXNlbGluZSksIHRleHRTdHlsZSk7CisgICAgICAg
ICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3VGV4dChUZXh0UnVuKHRleHRTdHIs
IG1fc3RhcnQsIG1fbGVuLCBlUG9zKSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgbV9i
YXNlbGluZSksIHRleHRTdHlsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAg
ICAgIAorCiAgICAgICAgIGlmIChzUG9zIDwgZVBvcykgewogICAgICAgICAgICAgLy8gcGFpbnQg
b25seSB0aGUgdGV4dCB0aGF0IGlzIHNlbGVjdGVkCi0gICAgICAgICAgICBpZiAoc2VsZWN0aW9u
Q29sb3IgIT0gaS5wLT5wZW4oKS5jb2xvcigpKQotICAgICAgICAgICAgICAgIGkucC0+c2V0UGVu
KHNlbGVjdGlvbkNvbG9yKTsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNlbGVjdGlv
bkNvbG9yICE9IHBhaW50SW5mby5jb250ZXh0LT5wZW4oKS5jb2xvcigpKQorICAgICAgICAgICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRQZW4oc2VsZWN0aW9uQ29sb3IpOworCiAgICAgICAg
ICAgICBpZiAoc2VsZWN0aW9uVGV4dFNoYWRvdykKLSAgICAgICAgICAgICAgICBpLnAtPnNldFNo
YWRvdyhJbnRTaXplKHNlbGVjdGlvblRleHRTaGFkb3ctPngsIHNlbGVjdGlvblRleHRTaGFkb3ct
PnkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblRleHRTaGFkb3ct
PmJsdXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVGV4dFNoYWRv
dy0+Y29sb3IpOwotICAgICAgICAgICAgaS5wLT5kcmF3VGV4dChUZXh0UnVuKHRleHRTdHIsIG1f
c3RhcnQsIG1fbGVuLCBzUG9zLCBlUG9zKSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsg
bV9iYXNlbGluZSksIHRleHRTdHlsZSk7CisgICAgICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNldFNoYWRvdyhJbnRTaXplKHNlbGVjdGlvblRleHRTaGFkb3ctPngsIHNlbGVjdGlvblRl
eHRTaGFkb3ctPnkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZWN0aW9uVGV4dFNoYWRvdy0+Ymx1ciwgc2VsZWN0aW9uVGV4dFNoYWRvdy0+Y29sb3Ip
OworICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdUZXh0KFRleHRSdW4odGV4dFN0
ciwgbV9zdGFydCwgbV9sZW4sIHNQb3MsIGVQb3MpLCBJbnRQb2ludChtX3ggKyB0eCwgbV95ICsg
dHkgKyBtX2Jhc2VsaW5lKSwgdGV4dFN0eWxlKTsKICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25U
ZXh0U2hhZG93KQotICAgICAgICAgICAgICAgIGkucC0+Y2xlYXJTaGFkb3coKTsKKyAgICAgICAg
ICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xlYXJTaGFkb3coKTsKICAgICAgICAgfQogICAg
IH0KIAogICAgIC8vIFBhaW50IGRlY29yYXRpb25zCi0gICAgaWYgKGQgIT0gVEROT05FICYmIGku
cGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiBzdHlsZVRvVXNlLT5odG1sSGFja3MoKSkg
ewotICAgICAgICBpLnAtPnNldFBlbihzdHlsZVRvVXNlLT5jb2xvcigpKTsKLSAgICAgICAgcGFp
bnREZWNvcmF0aW9uKGkucCwgdHgsIHR5LCBkKTsKKyAgICBpZiAoZCAhPSBURE5PTkUgJiYgcGFp
bnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24gJiYgc3R5bGVUb1VzZS0+aHRtbEhh
Y2tzKCkpIHsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFBlbihzdHlsZVRvVXNlLT5j
b2xvcigpKTsKKyAgICAgICAgcGFpbnREZWNvcmF0aW9uKHBhaW50SW5mby5jb250ZXh0LCB0eCwg
dHksIGQpOwogICAgIH0KIAotICAgIGlmIChpLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24p
IHsKLSAgICAgICAgcGFpbnREb2N1bWVudE1hcmtlcnMoaS5wLCB0eCwgdHksIHN0eWxlVG9Vc2Us
IGZvbnQsIGZhbHNlKTsKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxl
Y3Rpb24pIHsKKyAgICAgICAgcGFpbnREb2N1bWVudE1hcmtlcnMocGFpbnRJbmZvLmNvbnRleHQs
IHR4LCB0eSwgc3R5bGVUb1VzZSwgZm9udCwgZmFsc2UpOwogCiAgICAgICAgIGZvciAoc2l6ZV90
IGluZGV4ID0gMDsgaW5kZXggPCBudW1VbmRlcmxpbmVzOyArK2luZGV4KSB7CiAgICAgICAgICAg
ICBjb25zdCBNYXJrZWRUZXh0VW5kZXJsaW5lJiB1bmRlcmxpbmUgPSAoKnVuZGVybGluZXMpW2lu
ZGV4XTsKQEAgLTQwNCw3ICs0MDQsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFJlbmRl
ck9iamVjdDo6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh1bmRlcmxpbmUuc3RhcnRP
ZmZzZXQgPD0gZW5kKCkpIHsKICAgICAgICAgICAgICAgICAvLyB1bmRlcmxpbmUgaW50ZXJzZWN0
cyB0aGlzIHJ1bi4gIFBhaW50IGl0LgotICAgICAgICAgICAgICAgIHBhaW50TWFya2VkVGV4dFVu
ZGVybGluZShpLnAsIHR4LCB0eSwgdW5kZXJsaW5lKTsKKyAgICAgICAgICAgICAgICBwYWludE1h
cmtlZFRleHRVbmRlcmxpbmUocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgdW5kZXJsaW5lKTsK
ICAgICAgICAgICAgICAgICBpZiAodW5kZXJsaW5lLmVuZE9mZnNldCA+IGVuZCgpICsgMSkKICAg
ICAgICAgICAgICAgICAgICAgLy8gdW5kZXJsaW5lIGFsc28gcnVucyBpbnRvIHRoZSBuZXh0IHJ1
bi4gQmFpbCBub3csIG5vIG1vcmUgbWFya2VyIGFkdmFuY2VtZW50LgogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKQEAgLTQxNSw3ICs0MTUsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50
KFJlbmRlck9iamVjdDo6CiAgICAgfQogCiAgICAgaWYgKHNldFNoYWRvdykKLSAgICAgICAgaS5w
LT5jbGVhclNoYWRvdygpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xlYXJTaGFkb3co
KTsKIH0KIAogdm9pZCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZChpbnQmIHNQb3Ms
IGludCYgZVBvcykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDE3
NDQ3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw4ICsyMiw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgSW5saW5lVGV4dEJveF9ICi0j
ZGVmaW5lIElubGluZVRleHRCb3hfSAorI2lmbmRlZiBJbmxpbmVUZXh0Qm94X2gKKyNkZWZpbmUg
SW5saW5lVGV4dEJveF9oCiAKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUg
IklubGluZVJ1bkJveC5oIgpAQCAtNzEsOCArNzEsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1Nl
bGVjdGVkKGludCBzdGFydFBvcywgaW50IGVuZFBvcykgY29uc3Q7CiAgICAgdm9pZCBzZWxlY3Rp
b25TdGFydEVuZChpbnQmIHNQb3MsIGludCYgZVBvcyk7CiAgICAgCi0gICAgdmlydHVhbCB2b2lk
IHBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgdHgsIGludCB0eSk7Ci0gICAg
dmlydHVhbCBib29sIG5vZGVBdFBvaW50KEhpdFRlc3RSZXN1bHQmLCBpbnQsIGludCwgaW50LCBp
bnQpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGlu
dCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoSGl0VGVzdFJlc3Vs
dCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHkpOwogCiAgICAgUmVuZGVyVGV4dCogdGV4
dE9iamVjdCgpIGNvbnN0OwogCkBAIC0xNDgsNCArMTQ4LDQgQEAgaW5saW5lIFJlbmRlclRleHQq
IElubGluZVRleHRCb3g6OnRleHRPYgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRp
ZiAvLyBJbmxpbmVUZXh0Qm94X0gKKyNlbmRpZiAvLyBJbmxpbmVUZXh0Qm94X2gKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDE3NDQ4KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQzLDM1ICsxMjQzLDM1
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlcGFpbnRPYmplY3RzQmVmb3JlTGEKICAgICB9CiB9CiAK
LXZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSkK
K3ZvaWQgUmVuZGVyQmxvY2s6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGlu
dCB0eSkKIHsKLSAgICBfdHggKz0gbV94OwotICAgIF90eSArPSBtX3k7CisgICAgdHggKz0gbV94
OworICAgIHR5ICs9IG1feTsKIAogICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhp
bmcgYXQgYWxsLgogICAgIC8vIEZJWE1FOiBDb3VsZCBlbGltaW5hdGUgdGhlIGlzUm9vdCgpIGNo
ZWNrIGlmIHdlIGZpeCBiYWNrZ3JvdW5kIHBhaW50aW5nIHNvIHRoYXQgdGhlIFJlbmRlclZpZXcK
ICAgICAvLyBwYWludHMgdGhlIHJvb3QncyBiYWNrZ3JvdW5kLgogICAgIGlmICghaXNJbmxpbmVG
bG93KCkgJiYgIWlzUm9vdCgpKSB7CiAgICAgICAgIEludFJlY3Qgb3ZlcmZsb3dCb3ggPSBvdmVy
Zmxvd1JlY3QoZmFsc2UpOwotICAgICAgICBvdmVyZmxvd0JveC5pbmZsYXRlKG1heGltYWxPdXRs
aW5lU2l6ZShpLnBoYXNlKSk7Ci0gICAgICAgIG92ZXJmbG93Qm94Lm1vdmUoX3R4LCBfdHkpOwot
ICAgICAgICBib29sIGludGVyc2VjdHNPdmVyZmxvd0JveCA9IG92ZXJmbG93Qm94LmludGVyc2Vj
dHMoaS5yKTsKKyAgICAgICAgb3ZlcmZsb3dCb3guaW5mbGF0ZShtYXhpbWFsT3V0bGluZVNpemUo
cGFpbnRJbmZvLnBoYXNlKSk7CisgICAgICAgIG92ZXJmbG93Qm94Lm1vdmUodHgsIHR5KTsKKyAg
ICAgICAgYm9vbCBpbnRlcnNlY3RzT3ZlcmZsb3dCb3ggPSBvdmVyZmxvd0JveC5pbnRlcnNlY3Rz
KHBhaW50SW5mby5yZWN0KTsKICAgICAgICAgaWYgKCFpbnRlcnNlY3RzT3ZlcmZsb3dCb3gpIHsK
ICAgICAgICAgICAgIC8vIENoZWNrIGZsb2F0cyBuZXh0LgotICAgICAgICAgICAgaWYgKGkucGhh
c2UgIT0gUGFpbnRQaGFzZUZsb2F0ICYmIGkucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbikK
KyAgICAgICAgICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZsb2F0ICYmIHBh
aW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlU2VsZWN0aW9uKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIEludFJlY3QgZmxvYXRCb3ggPSBmbG9hdFJlY3QoKTsKLSAgICAg
ICAgICAgIGZsb2F0Qm94LmluZmxhdGUobWF4aW1hbE91dGxpbmVTaXplKGkucGhhc2UpKTsKLSAg
ICAgICAgICAgIGZsb2F0Qm94Lm1vdmUoX3R4LCBfdHkpOwotICAgICAgICAgICAgaWYgKCFmbG9h
dEJveC5pbnRlcnNlY3RzKGkucikpCisgICAgICAgICAgICBmbG9hdEJveC5pbmZsYXRlKG1heGlt
YWxPdXRsaW5lU2l6ZShwYWludEluZm8ucGhhc2UpKTsKKyAgICAgICAgICAgIGZsb2F0Qm94Lm1v
dmUodHgsIHR5KTsKKyAgICAgICAgICAgIGlmICghZmxvYXRCb3guaW50ZXJzZWN0cyhwYWludElu
Zm8ucmVjdCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgcmV0dXJuIHBhaW50T2JqZWN0KGksIF90eCwgX3R5KTsKKyAgICByZXR1cm4gcGFpbnRPYmpl
Y3QocGFpbnRJbmZvLCB0eCwgdHkpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxk
cmVuKFBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSkKK3ZvaWQgUmVuZGVyQmxvY2s6OnBh
aW50Q2hpbGRyZW4oUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogewogICAg
IC8vIEF2b2lkIHBhaW50aW5nIGRlc2NlbmRhbnRzIG9mIHRoZSByb290IGVsZW1lbnQgd2hlbiBz
dHlsZXNoZWV0cyBoYXZlbid0IGxvYWRlZC4gIFRoaXMgZWxpbWluYXRlcyBGT1VDLgogICAgIC8v
IEl0J3Mgb2sgbm90IHRvIGRyYXcsIGJlY2F1c2UgbGF0ZXIgb24sIHdoZW4gYWxsIHRoZSBzdHls
ZXNoZWV0cyBkbyBsb2FkLCB1cGRhdGVTdHlsZVNlbGVjdG9yIG9uIHRoZSBEb2N1bWVudApAQCAt
MTI3OSw1MyArMTI3OSw1MiBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBhaW50
SW5mCiAgICAgaWYgKGRvY3VtZW50KCktPmRpZExheW91dFdpdGhQZW5kaW5nU3R5bGVzaGVldHMo
KSAmJiAhaXNSZW5kZXJWaWV3KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBQYWludFBo
YXNlIG5ld1BoYXNlID0gKGkucGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkT3V0bGluZXMpID8gUGFp
bnRQaGFzZU91dGxpbmUgOiBpLnBoYXNlOworICAgIFBhaW50UGhhc2UgbmV3UGhhc2UgPSAocGFp
bnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzKSA/IFBhaW50UGhhc2VPdXRs
aW5lIDogcGFpbnRJbmZvLnBoYXNlOwogICAgIG5ld1BoYXNlID0gKG5ld1BoYXNlID09IFBhaW50
UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHMpID8gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3Jv
dW5kIDogbmV3UGhhc2U7CiAgICAgCiAgICAgLy8gV2UgZG9uJ3QgcGFpbnQgb3VyIG93biBiYWNr
Z3JvdW5kLCBidXQgd2UgZG8gbGV0IHRoZSBraWRzIHBhaW50IHRoZWlyIGJhY2tncm91bmRzLgot
ICAgIFBhaW50SW5mbyBwYWludEluZm8oaSk7Ci0gICAgcGFpbnRJbmZvLnBoYXNlID0gbmV3UGhh
c2U7CisgICAgUGFpbnRJbmZvIGluZm8ocGFpbnRJbmZvKTsKKyAgICBpbmZvLnBoYXNlID0gbmV3
UGhhc2U7CiAgICAgYm9vbCBpc1ByaW50aW5nID0gZG9jdW1lbnQoKS0+cHJpbnRpbmcoKTsKIAot
ICAgIGZvciAoUmVuZGVyT2JqZWN0ICpjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsgICAgICAgIAorICAgIGZvciAoUmVuZGVyT2JqZWN0
KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpIHsgICAgICAgIAogICAgICAgICAvLyBDaGVjayBmb3IgcGFnZS1icmVhay1iZWZvcmU6IGFs
d2F5cywgYW5kIGlmIGl0J3Mgc2V0LCBicmVhayBhbmQgYmFpbC4KICAgICAgICAgaWYgKGlzUHJp
bnRpbmcgJiYgIWNoaWxkcmVuSW5saW5lKCkgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0Jl
Zm9yZSgpID09IFBCQUxXQVlTICYmCi0gICAgICAgICAgICBpblJvb3RCbG9ja0NvbnRleHQoKSAm
JiAoX3R5ICsgY2hpbGQtPnlQb3MoKSkgPiBpLnIueSgpICYmIAotICAgICAgICAgICAgKF90eSAr
IGNoaWxkLT55UG9zKCkpIDwgaS5yLmJvdHRvbSgpKSB7Ci0gICAgICAgICAgICB2aWV3KCktPnNl
dEJlc3RUcnVuY2F0ZWRBdChfdHkgKyBjaGlsZC0+eVBvcygpLCB0aGlzLCB0cnVlKTsKKyAgICAg
ICAgICAgIGluUm9vdEJsb2NrQ29udGV4dCgpICYmICh0eSArIGNoaWxkLT55UG9zKCkpID4gcGFp
bnRJbmZvLnJlY3QueSgpICYmIAorICAgICAgICAgICAgKHR5ICsgY2hpbGQtPnlQb3MoKSkgPCBw
YWludEluZm8ucmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgdmlldygpLT5zZXRCZXN0VHJ1
bmNhdGVkQXQodHkgKyBjaGlsZC0+eVBvcygpLCB0aGlzLCB0cnVlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoIWNoaWxkLT5sYXllcigp
ICYmICFjaGlsZC0+aXNGbG9hdGluZygpKQotICAgICAgICAgICAgY2hpbGQtPnBhaW50KHBhaW50
SW5mbywgX3R4LCBfdHkpOwotICAgICAgICAKKyAgICAgICAgICAgIGNoaWxkLT5wYWludChpbmZv
LCB0eCwgdHkpOworCiAgICAgICAgIC8vIENoZWNrIGZvciBwYWdlLWJyZWFrLWFmdGVyOiBhbHdh
eXMsIGFuZCBpZiBpdCdzIHNldCwgYnJlYWsgYW5kIGJhaWwuCiAgICAgICAgIGlmIChpc1ByaW50
aW5nICYmICFjaGlsZHJlbklubGluZSgpICYmIGNoaWxkLT5zdHlsZSgpLT5wYWdlQnJlYWtBZnRl
cigpID09IFBCQUxXQVlTICYmIAotICAgICAgICAgICAgaW5Sb290QmxvY2tDb250ZXh0KCkgJiYg
KF90eSArIGNoaWxkLT55UG9zKCkgKyBjaGlsZC0+aGVpZ2h0KCkpID4gaS5yLnkoKSAmJiAKLSAg
ICAgICAgICAgIChfdHkgKyBjaGlsZC0+eVBvcygpICsgY2hpbGQtPmhlaWdodCgpKSA8IGkuci5i
b3R0b20oKSkgewotICAgICAgICAgICAgdmlldygpLT5zZXRCZXN0VHJ1bmNhdGVkQXQoX3R5ICsg
Y2hpbGQtPnlQb3MoKSArIGNoaWxkLT5oZWlnaHQoKSArIGNoaWxkLT5jb2xsYXBzZWRNYXJnaW5C
b3R0b20oKSwgdGhpcywgdHJ1ZSk7CisgICAgICAgICAgICBpblJvb3RCbG9ja0NvbnRleHQoKSAm
JiAodHkgKyBjaGlsZC0+eVBvcygpICsgY2hpbGQtPmhlaWdodCgpKSA+IHBhaW50SW5mby5yZWN0
LnkoKSAmJiAKKyAgICAgICAgICAgICh0eSArIGNoaWxkLT55UG9zKCkgKyBjaGlsZC0+aGVpZ2h0
KCkpIDwgcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkpIHsKKyAgICAgICAgICAgIHZpZXcoKS0+c2V0
QmVzdFRydW5jYXRlZEF0KHR5ICsgY2hpbGQtPnlQb3MoKSArIGNoaWxkLT5oZWlnaHQoKSArIGNo
aWxkLT5jb2xsYXBzZWRNYXJnaW5Cb3R0b20oKSwgdGhpcywgdHJ1ZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2Fy
ZXQoUGFpbnRJbmZvJiBpLCBDYXJldFR5cGUgdHlwZSkKK3ZvaWQgUmVuZGVyQmxvY2s6OnBhaW50
Q2FyZXQoUGFpbnRJbmZvJiBwYWludEluZm8sIENhcmV0VHlwZSB0eXBlKQogewogICAgIFNlbGVj
dGlvbkNvbnRyb2xsZXIqIHNlbGVjdGlvbkNvbnRyb2xsZXIgPSB0eXBlID09IEN1cnNvckNhcmV0
ID8gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uQ29udHJvbGxlcigpIDogZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+ZHJhZ0NhcmV0Q29udHJvbGxlcigpOwotICAgIE5vZGUgKmNhcmV0Tm9kZSA9
IHNlbGVjdGlvbkNvbnRyb2xsZXItPnN0YXJ0KCkubm9kZSgpOwotICAgIFJlbmRlck9iamVjdCAq
cmVuZGVyZXIgPSBjYXJldE5vZGUgPyBjYXJldE5vZGUtPnJlbmRlcmVyKCkgOiAwOworICAgIE5v
ZGUqIGNhcmV0Tm9kZSA9IHNlbGVjdGlvbkNvbnRyb2xsZXItPnN0YXJ0KCkubm9kZSgpOworICAg
IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBjYXJldE5vZGUgPyBjYXJldE5vZGUtPnJlbmRlcmVy
KCkgOiAwOwogICAgIGlmIChyZW5kZXJlciAmJiAocmVuZGVyZXIgPT0gdGhpcyB8fCByZW5kZXJl
ci0+Y29udGFpbmluZ0Jsb2NrKCkgPT0gdGhpcykgJiYgY2FyZXROb2RlICYmIGNhcmV0Tm9kZS0+
aXNDb250ZW50RWRpdGFibGUoKSkgewotICAgICAgICBpZiAodHlwZSA9PSBDdXJzb3JDYXJldCkg
ewotICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFpbnRDYXJldChpLnAsIGkucik7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5wYWlu
dERyYWdDYXJldChpLnAsIGkucik7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUgPT0gQ3Vy
c29yQ2FyZXQpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5wYWludENhcmV0KHBh
aW50SW5mby5jb250ZXh0LCBwYWludEluZm8ucmVjdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGRvY3VtZW50KCktPmZyYW1lKCktPnBhaW50RHJhZ0NhcmV0KHBhaW50SW5mby5jb250ZXh0
LCBwYWludEluZm8ucmVjdCk7CiAgICAgfQogfQogCi12b2lkIFJlbmRlckJsb2NrOjpwYWludE9i
amVjdChQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpCit2b2lkIFJlbmRlckJsb2NrOjpw
YWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAg
UGFpbnRQaGFzZSBwYWludFBoYXNlID0gaS5waGFzZTsKKyAgICBQYWludFBoYXNlIHBhaW50UGhh
c2UgPSBwYWludEluZm8ucGhhc2U7CiAKICAgICAvLyBJZiB3ZSdyZSBhIHJlcG9zaXRpb25lZCBy
dW4taW4gb3IgYSBjb21wYWN0LCBkb24ndCBwYWludCBiYWNrZ3JvdW5kL2JvcmRlcnMuCiAgICAg
Ym9vbCBpbmxpbmVGbG93ID0gaXNJbmxpbmVGbG93KCk7CkBAIC0xMzM0LDcgKzEzMzMsNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjpwYWludE9iamVjdChQYWludEluZm8mCiAgICAgaWYgKCFpbmxpbmVG
bG93ICYmCiAgICAgICAgIChwYWludFBoYXNlID09IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQg
fHwgcGFpbnRQaGFzZSA9PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmQpICYmCiAgICAg
ICAgIHNob3VsZFBhaW50QmFja2dyb3VuZE9yQm9yZGVyKCkgJiYgc3R5bGUoKS0+dmlzaWJpbGl0
eSgpID09IFZJU0lCTEUpIHsKLSAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhpLCBfdHgsIF90
eSk7CisgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCB0eCwgdHkpOwogICAg
IH0KIAogICAgIC8vIFdlJ3JlIGRvbmUuICBXZSBkb24ndCBib3RoZXIgcGFpbnRpbmcgYW55IGNo
aWxkcmVuLgpAQCAtMTM0MiwxMDMgKzEzNDEsMTAzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50
T2JqZWN0KFBhaW50SW5mbyYKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gQWRqdXN0IG91ciBw
YWludGluZyBwb3NpdGlvbiBpZiB3ZSdyZSBpbnNpZGUgYSBzY3JvbGxlZCBsYXllciAoZS5nLiwg
YW4gb3ZlcmZsb3c6YXV0byBkaXYpLnMKLSAgICBpbnQgc2Nyb2xsZWRYID0gX3R4OwotICAgIGlu
dCBzY3JvbGxlZFkgPSBfdHk7CisgICAgaW50IHNjcm9sbGVkWCA9IHR4OworICAgIGludCBzY3Jv
bGxlZFkgPSB0eTsKICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIG1fbGF5ZXIt
PnN1YnRyYWN0U2Nyb2xsT2Zmc2V0KHNjcm9sbGVkWCwgc2Nyb2xsZWRZKTsKIAogICAgIC8vIDIu
IHBhaW50IGNvbnRlbnRzCiAgICAgaWYgKHBhaW50UGhhc2UgIT0gUGFpbnRQaGFzZVNlbGZPdXRs
aW5lKSB7CiAgICAgICAgIGlmIChjaGlsZHJlbklubGluZSgpKQotICAgICAgICAgICAgcGFpbnRM
aW5lcyhpLCBzY3JvbGxlZFgsIHNjcm9sbGVkWSk7CisgICAgICAgICAgICBwYWludExpbmVzKHBh
aW50SW5mbywgc2Nyb2xsZWRYLCBzY3JvbGxlZFkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBwYWludENoaWxkcmVuKGksIHNjcm9sbGVkWCwgc2Nyb2xsZWRZKTsKKyAgICAgICAgICAgIHBh
aW50Q2hpbGRyZW4ocGFpbnRJbmZvLCBzY3JvbGxlZFgsIHNjcm9sbGVkWSk7CiAgICAgfQotICAg
IAorCiAgICAgLy8gMy4gcGFpbnQgc2VsZWN0aW9uCiAgICAgYm9vbCBpc1ByaW50aW5nID0gZG9j
dW1lbnQoKS0+cHJpbnRpbmcoKTsKICAgICBpZiAoIWlubGluZUZsb3cgJiYgIWlzUHJpbnRpbmcp
Ci0gICAgICAgIHBhaW50U2VsZWN0aW9uKGksIHNjcm9sbGVkWCwgc2Nyb2xsZWRZKTsgLy8gRmls
bCBpbiBnYXBzIGluIHNlbGVjdGlvbiBvbiBsaW5lcyBhbmQgYmV0d2VlbiBibG9ja3MuCisgICAg
ICAgIHBhaW50U2VsZWN0aW9uKHBhaW50SW5mbywgc2Nyb2xsZWRYLCBzY3JvbGxlZFkpOyAvLyBG
aWxsIGluIGdhcHMgaW4gc2VsZWN0aW9uIG9uIGxpbmVzIGFuZCBiZXR3ZWVuIGJsb2Nrcy4KIAog
ICAgIC8vIDQuIHBhaW50IGZsb2F0cy4KICAgICBpZiAoIWlubGluZUZsb3cgJiYgKHBhaW50UGhh
c2UgPT0gUGFpbnRQaGFzZUZsb2F0IHx8IHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlv
bikpCi0gICAgICAgIHBhaW50RmxvYXRzKGksIHNjcm9sbGVkWCwgc2Nyb2xsZWRZLCBwYWludFBo
YXNlID09IFBhaW50UGhhc2VTZWxlY3Rpb24pOworICAgICAgICBwYWludEZsb2F0cyhwYWludElu
Zm8sIHNjcm9sbGVkWCwgc2Nyb2xsZWRZLCBwYWludFBoYXNlID09IFBhaW50UGhhc2VTZWxlY3Rp
b24pOwogCiAgICAgLy8gNS4gcGFpbnQgb3V0bGluZS4KICAgICBpZiAoIWlubGluZUZsb3cgJiYg
KHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgcGFpbnRQaGFzZSA9PSBQYWludFBo
YXNlU2VsZk91dGxpbmUpIAogICAgICAgICAmJiBoYXNPdXRsaW5lKCkgJiYgc3R5bGUoKS0+dmlz
aWJpbGl0eSgpID09IFZJU0lCTEUpCi0gICAgICAgIFJlbmRlck9iamVjdDo6cGFpbnRPdXRsaW5l
KGkucCwgX3R4LCBfdHksIHdpZHRoKCksIGhlaWdodCgpLCBzdHlsZSgpKTsKKyAgICAgICAgUmVu
ZGVyT2JqZWN0OjpwYWludE91dGxpbmUocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgd2lkdGgo
KSwgaGVpZ2h0KCksIHN0eWxlKCkpOwogCiAgICAgLy8gNi4gcGFpbnQgY2FyZXQuCiAgICAgLy8g
SWYgdGhlIGNhcmV0J3Mgbm9kZSdzIHJlbmRlciBvYmplY3QncyBjb250YWluaW5nIGJsb2NrIGlz
IHRoaXMgYmxvY2ssIGFuZCB0aGUgcGFpbnQgYWN0aW9uIGlzIFBhaW50UGhhc2VGb3JlZ3JvdW5k
LAogICAgIC8vIHRoZW4gcGFpbnQgdGhlIGNhcmV0LgogICAgIGlmICghaW5saW5lRmxvdyAmJiBw
YWludFBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7ICAgICAgICAKLSAgICAgICAgcGFp
bnRDYXJldChpLCBDdXJzb3JDYXJldCk7Ci0gICAgICAgIHBhaW50Q2FyZXQoaSwgRHJhZ0NhcmV0
KTsKKyAgICAgICAgcGFpbnRDYXJldChwYWludEluZm8sIEN1cnNvckNhcmV0KTsKKyAgICAgICAg
cGFpbnRDYXJldChwYWludEluZm8sIERyYWdDYXJldCk7CiAgICAgfQogCiAjaWZkZWYgQk9YX0RF
QlVHCi0gICAgaWYgKCBzdHlsZSgpICYmIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxF
ICkgeworICAgIGlmIChzdHlsZSgpICYmIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxF
KSB7CiAgICAgICAgIGlmKGlzQW5vbnltb3VzKCkpCi0gICAgICAgICAgICBvdXRsaW5lQm94KGku
cCwgX3R4LCBfdHksICJncmVlbiIpOworICAgICAgICAgICAgb3V0bGluZUJveChwYWludEluZm8u
Y29udGV4dCwgdHgsIHR5LCAiZ3JlZW4iKTsKICAgICAgICAgaWYoaXNGbG9hdGluZygpKQotICAg
ICAgICAgICAgb3V0bGluZUJveChpLnAsIF90eCwgX3R5LCAieWVsbG93Iik7CisgICAgICAgICAg
ICBvdXRsaW5lQm94KHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksICJ5ZWxsb3ciKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgb3V0bGluZUJveChpLnAsIF90eCwgX3R5KTsKKyAgICAgICAg
ICAgIG91dGxpbmVCb3gocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSk7CiAgICAgfQogI2VuZGlm
CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnBhaW50RmxvYXRzKFBhaW50SW5mbyYgaSwgaW50IF90
eCwgaW50IF90eSwgYm9vbCBwYWludFNlbGVjdGlvbikKK3ZvaWQgUmVuZGVyQmxvY2s6OnBhaW50
RmxvYXRzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSwgYm9vbCBwYWludFNl
bGVjdGlvbikKIHsKICAgICBpZiAoIW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICByZXR1cm47
CiAKICAgICBGbG9hdGluZ09iamVjdCogcjsKICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9y
PEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwotICAgIGZvciAoIDsgKHIg
PSBpdC5jdXJyZW50KCkpOyArK2l0KSB7CisgICAgZm9yICg7IChyID0gaXQuY3VycmVudCgpKTsg
KytpdCkgewogICAgICAgICAvLyBPbmx5IHBhaW50IHRoZSBvYmplY3QgaWYgb3VyIG5vUGFpbnQg
ZmxhZyBpc24ndCBzZXQuCiAgICAgICAgIGlmICghci0+bm9QYWludCAmJiAhci0+bm9kZS0+bGF5
ZXIoKSkgewotICAgICAgICAgICAgUGFpbnRJbmZvIGluZm8oaSk7Ci0gICAgICAgICAgICBpbmZv
LnBoYXNlID0gcGFpbnRTZWxlY3Rpb24gPyBQYWludFBoYXNlU2VsZWN0aW9uIDogUGFpbnRQaGFz
ZUJsb2NrQmFja2dyb3VuZDsKLSAgICAgICAgICAgIGludCB0eCA9IF90eCArIHItPmxlZnQgLSBy
LT5ub2RlLT54UG9zKCkgKyByLT5ub2RlLT5tYXJnaW5MZWZ0KCk7Ci0gICAgICAgICAgICBpbnQg
dHkgPSBfdHkgKyByLT5zdGFydFkgLSByLT5ub2RlLT55UG9zKCkgKyByLT5ub2RlLT5tYXJnaW5U
b3AoKTsKLSAgICAgICAgICAgIHItPm5vZGUtPnBhaW50KGluZm8sIHR4LCB0eSk7CisgICAgICAg
ICAgICBQYWludEluZm8gY3VycmVudFBhaW50SW5mbyhwYWludEluZm8pOworICAgICAgICAgICAg
Y3VycmVudFBhaW50SW5mby5waGFzZSA9IHBhaW50U2VsZWN0aW9uID8gUGFpbnRQaGFzZVNlbGVj
dGlvbiA6IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQ7CisgICAgICAgICAgICBpbnQgY3VycmVu
dFRYID0gdHggKyByLT5sZWZ0IC0gci0+bm9kZS0+eFBvcygpICsgci0+bm9kZS0+bWFyZ2luTGVm
dCgpOworICAgICAgICAgICAgaW50IGN1cnJlbnRUWSA9IHR5ICsgci0+c3RhcnRZIC0gci0+bm9k
ZS0+eVBvcygpICsgci0+bm9kZS0+bWFyZ2luVG9wKCk7CisgICAgICAgICAgICByLT5ub2RlLT5w
YWludChjdXJyZW50UGFpbnRJbmZvLCBjdXJyZW50VFgsIGN1cnJlbnRUWSk7CiAgICAgICAgICAg
ICBpZiAoIXBhaW50U2VsZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgaW5mby5waGFzZSA9IFBh
aW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHM7Ci0gICAgICAgICAgICAgICAgci0+bm9kZS0+
cGFpbnQoaW5mbywgdHgsIHR5KTsKLSAgICAgICAgICAgICAgICBpbmZvLnBoYXNlID0gUGFpbnRQ
aGFzZUZsb2F0OwotICAgICAgICAgICAgICAgIHItPm5vZGUtPnBhaW50KGluZm8sIHR4LCB0eSk7
Ci0gICAgICAgICAgICAgICAgaW5mby5waGFzZSA9IFBhaW50UGhhc2VGb3JlZ3JvdW5kOwotICAg
ICAgICAgICAgICAgIHItPm5vZGUtPnBhaW50KGluZm8sIHR4LCB0eSk7Ci0gICAgICAgICAgICAg
ICAgaW5mby5waGFzZSA9IFBhaW50UGhhc2VPdXRsaW5lOwotICAgICAgICAgICAgICAgIHItPm5v
ZGUtPnBhaW50KGluZm8sIHR4LCB0eSk7CisgICAgICAgICAgICAgICAgY3VycmVudFBhaW50SW5m
by5waGFzZSA9IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHM7CisgICAgICAgICAgICAg
ICAgci0+bm9kZS0+cGFpbnQoY3VycmVudFBhaW50SW5mbywgY3VycmVudFRYLCBjdXJyZW50VFkp
OworICAgICAgICAgICAgICAgIGN1cnJlbnRQYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlRmxv
YXQ7CisgICAgICAgICAgICAgICAgci0+bm9kZS0+cGFpbnQoY3VycmVudFBhaW50SW5mbywgY3Vy
cmVudFRYLCBjdXJyZW50VFkpOworICAgICAgICAgICAgICAgIGN1cnJlbnRQYWludEluZm8ucGhh
c2UgPSBQYWludFBoYXNlRm9yZWdyb3VuZDsKKyAgICAgICAgICAgICAgICByLT5ub2RlLT5wYWlu
dChjdXJyZW50UGFpbnRJbmZvLCBjdXJyZW50VFgsIGN1cnJlbnRUWSk7CisgICAgICAgICAgICAg
ICAgY3VycmVudFBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VPdXRsaW5lOworICAgICAgICAg
ICAgICAgIHItPm5vZGUtPnBhaW50KGN1cnJlbnRQYWludEluZm8sIGN1cnJlbnRUWCwgY3VycmVu
dFRZKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJC
bG9jazo6cGFpbnRFbGxpcHNpc0JveGVzKFBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSkK
K3ZvaWQgUmVuZGVyQmxvY2s6OnBhaW50RWxsaXBzaXNCb3hlcyhQYWludEluZm8mIHBhaW50SW5m
bywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgaWYgKCFzaG91bGRQYWludFdpdGhpblJvb3QoaSkg
fHwgIWZpcnN0TGluZUJveCgpKQorICAgIGlmICghc2hvdWxkUGFpbnRXaXRoaW5Sb290KHBhaW50
SW5mbykgfHwgIWZpcnN0TGluZUJveCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc3R5
bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUgJiYgaS5waGFzZSA9PSBQYWludFBoYXNlRm9y
ZWdyb3VuZCkgeworICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSAmJiBw
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKICAgICAgICAgLy8gV2Ug
Y2FuIGNoZWNrIHRoZSBmaXJzdCBib3ggYW5kIGxhc3QgYm94IGFuZCBhdm9pZCBwYWludGluZyBp
ZiB3ZSBkb24ndAogICAgICAgICAvLyBpbnRlcnNlY3QuCi0gICAgICAgIGludCB5UG9zID0gX3R5
ICsgZmlyc3RMaW5lQm94KCktPnlQb3MoKTs7CisgICAgICAgIGludCB5UG9zID0gdHkgKyBmaXJz
dExpbmVCb3goKS0+eVBvcygpOzsKICAgICAgICAgaW50IGggPSBsYXN0TGluZUJveCgpLT55UG9z
KCkgKyBsYXN0TGluZUJveCgpLT5oZWlnaHQoKSAtIGZpcnN0TGluZUJveCgpLT55UG9zKCk7Ci0g
ICAgICAgIGlmICh5UG9zID49IGkuci5ib3R0b20oKSB8fCB5UG9zICsgaCA8PSBpLnIueSgpKQor
ICAgICAgICBpZiAoeVBvcyA+PSBwYWludEluZm8ucmVjdC5ib3R0b20oKSB8fCB5UG9zICsgaCA8
PSBwYWludEluZm8ucmVjdC55KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8g
U2VlIGlmIG91ciBib3hlcyBpbnRlcnNlY3Qgd2l0aCB0aGUgZGlydHkgcmVjdC4gIElmIHNvLCB0
aGVuIHdlIHBhaW50CiAgICAgICAgIC8vIHRoZW0uICBOb3RlIHRoYXQgYm94ZXMgY2FuIGVhc2ls
eSBvdmVybGFwLCBzbyB3ZSBjYW4ndCBtYWtlIGFueSBhc3N1bXB0aW9ucwogICAgICAgICAvLyBi
YXNlZCBvZmYgcG9zaXRpb25zIG9mIG91ciBmaXJzdCBsaW5lIGJveCBvciBvdXIgbGFzdCBsaW5l
IGJveC4KICAgICAgICAgZm9yIChSb290SW5saW5lQm94KiBjdXJyID0gZmlyc3RSb290Qm94KCk7
IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0Um9vdEJveCgpKSB7Ci0gICAgICAgICAgICB5UG9zID0g
X3R5ICsgY3Vyci0+eVBvcygpOworICAgICAgICAgICAgeVBvcyA9IHR5ICsgY3Vyci0+eVBvcygp
OwogICAgICAgICAgICAgaCA9IGN1cnItPmhlaWdodCgpOwotICAgICAgICAgICAgaWYgKGN1cnIt
PmVsbGlwc2lzQm94KCkgJiYgeVBvcyA8IGkuci5ib3R0b20oKSAmJiB5UG9zICsgaCA+IGkuci55
KCkpCi0gICAgICAgICAgICAgICAgY3Vyci0+cGFpbnRFbGxpcHNpc0JveChpLCBfdHgsIF90eSk7
CisgICAgICAgICAgICBpZiAoY3Vyci0+ZWxsaXBzaXNCb3goKSAmJiB5UG9zIDwgcGFpbnRJbmZv
LnJlY3QuYm90dG9tKCkgJiYgeVBvcyArIGggPiBwYWludEluZm8ucmVjdC55KCkpCisgICAgICAg
ICAgICAgICAgY3Vyci0+cGFpbnRFbGxpcHNpc0JveChwYWludEluZm8sIHR4LCB0eSk7CiAgICAg
ICAgIH0KICAgICB9CiB9CkBAIC0xNTA0LDE4ICsxNTAzLDE4IEBAIEdhcFJlY3RzIFJlbmRlckJs
b2NrOjpzZWxlY3Rpb25HYXBSZWN0cygKICAgICByZXR1cm4gZmlsbFNlbGVjdGlvbkdhcHModGhp
cywgdHgsIHR5LCB0eCwgdHksIGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0UmlnaHQpOwogfQogCi12
b2lkIFJlbmRlckJsb2NrOjpwYWludFNlbGVjdGlvbihQYWludEluZm8mIGksIGludCB0eCwgaW50
IHR5KQordm9pZCBSZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24oUGFpbnRJbmZvJiBwYWludElu
Zm8sIGludCB0eCwgaW50IHR5KQogewotICAgIGlmIChzaG91bGRQYWludFNlbGVjdGlvbkdhcHMo
KSAmJiBpLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7CisgICAgaWYgKHNob3VsZFBh
aW50U2VsZWN0aW9uR2FwcygpICYmIHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdy
b3VuZCkgewogICAgICAgICBpbnQgbGFzdFRvcCA9IC1ib3JkZXJUb3BFeHRyYSgpOwogICAgICAg
ICBpbnQgbGFzdExlZnQgPSBsZWZ0U2VsZWN0aW9uT2Zmc2V0KHRoaXMsIGxhc3RUb3ApOwogICAg
ICAgICBpbnQgbGFzdFJpZ2h0ID0gcmlnaHRTZWxlY3Rpb25PZmZzZXQodGhpcywgbGFzdFRvcCk7
Ci0gICAgICAgIGZpbGxTZWxlY3Rpb25HYXBzKHRoaXMsIHR4LCB0eSwgdHgsIHR5LCBsYXN0VG9w
LCBsYXN0TGVmdCwgbGFzdFJpZ2h0LCAmaSk7CisgICAgICAgIGZpbGxTZWxlY3Rpb25HYXBzKHRo
aXMsIHR4LCB0eSwgdHgsIHR5LCBsYXN0VG9wLCBsYXN0TGVmdCwgbGFzdFJpZ2h0LCAmcGFpbnRJ
bmZvKTsKICAgICB9CiB9CiAKLUdhcFJlY3RzIFJlbmRlckJsb2NrOjpmaWxsU2VsZWN0aW9uR2Fw
cyhSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBpbnQgYmxvY2tYLCBpbnQgYmxvY2tZLCBpbnQgdHgs
IGludCB0eSwgaW50JiBsYXN0VG9wLCBpbnQmIGxhc3RMZWZ0LCBpbnQmIGxhc3RSaWdodCwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGFpbnRJbmZvKiBp
KQorR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmZpbGxTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiBy
b290QmxvY2ssIGludCBibG9ja1gsIGludCBibG9ja1ksIGludCB0eCwgaW50IHR5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbGFzdFRvcCwgaW50JiBsYXN0
TGVmdCwgaW50JiBsYXN0UmlnaHQsIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQogewogICAg
IC8vIEZJWE1FOiBvdmVyZmxvdzogYXV0by9zY3JvbGwgcmVnaW9ucyBuZWVkIG1vcmUgbWF0aCBo
ZXJlLCBzaW5jZSBwYWludGluZyBpbiB0aGUgYm9yZGVyIGJveCBpcyBkaWZmZXJlbnQgZnJvbSBw
YWludGluZyBpbiB0aGUgcGFkZGluZyBib3ggKG9uZSBpcyBzY3JvbGxlZCwgdGhlIG90aGVyIGlz
CiAgICAgLy8gZml4ZWQpLgpAQCAtMTUyNCwyMiArMTUyMywyMiBAQCBHYXBSZWN0cyBSZW5kZXJC
bG9jazo6ZmlsbFNlbGVjdGlvbkdhcHMoCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICBp
ZiAoY2hpbGRyZW5JbmxpbmUoKSkKLSAgICAgICAgcmVzdWx0ID0gZmlsbElubGluZVNlbGVjdGlv
bkdhcHMocm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgdHgsIHR5LCBsYXN0VG9wLCBsYXN0TGVm
dCwgbGFzdFJpZ2h0LCBpKTsKKyAgICAgICAgcmVzdWx0ID0gZmlsbElubGluZVNlbGVjdGlvbkdh
cHMocm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgdHgsIHR5LCBsYXN0VG9wLCBsYXN0TGVmdCwg
bGFzdFJpZ2h0LCBwYWludEluZm8pOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZmlsbEJs
b2NrU2VsZWN0aW9uR2Fwcyhyb290QmxvY2ssIGJsb2NrWCwgYmxvY2tZLCB0eCwgdHksIGxhc3RU
b3AsIGxhc3RMZWZ0LCBsYXN0UmlnaHQsIGkpOwotICAgICAgICAKKyAgICAgICAgcmVzdWx0ID0g
ZmlsbEJsb2NrU2VsZWN0aW9uR2Fwcyhyb290QmxvY2ssIGJsb2NrWCwgYmxvY2tZLCB0eCwgdHks
IGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0UmlnaHQsIHBhaW50SW5mbyk7CisKICAgICAvLyBHbyBh
aGVhZCBhbmQgZmlsbCB0aGUgdmVydGljYWwgZ2FwIGFsbCB0aGUgd2F5IHRvIHRoZSBib3R0b20g
b2Ygb3VyIGJsb2NrIGlmIHRoZSBzZWxlY3Rpb24gZXh0ZW5kcyBwYXN0IG91ciBibG9jay4KICAg
ICBpZiAocm9vdEJsb2NrID09IHRoaXMgJiYgKG1fc2VsZWN0aW9uU3RhdGUgIT0gU2VsZWN0aW9u
Qm90aCAmJiBtX3NlbGVjdGlvblN0YXRlICE9IFNlbGVjdGlvbkVuZCkpCiAgICAgICAgIHJlc3Vs
dC51bml0ZUNlbnRlcihmaWxsVmVydGljYWxTZWxlY3Rpb25HYXAobGFzdFRvcCwgbGFzdExlZnQs
IGxhc3RSaWdodCwgdHkgKyBoZWlnaHQoKSArIGJvcmRlckJvdHRvbUV4dHJhKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdEJsb2NrLCBi
bG9ja1gsIGJsb2NrWSwgaSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJvb3RCbG9jaywgYmxvY2tYLCBibG9ja1ksIHBhaW50SW5mbykpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpmaWxsSW5saW5l
U2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBpbnQgYmxvY2tYLCBpbnQgYmxv
Y2tZLCBpbnQgdHgsIGludCB0eSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50JiBsYXN0VG9wLCBpbnQmIGxhc3RMZWZ0LCBpbnQmIGxhc3RSaWdodCwg
Y29uc3QgUGFpbnRJbmZvKiBpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCYgbGFzdFRvcCwgaW50JiBsYXN0TGVmdCwgaW50JiBsYXN0UmlnaHQsIGNv
bnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQogewogICAgIEdhcFJlY3RzIHJlc3VsdDsKLSAgICAK
KwogICAgIFJlbmRlck9iamVjdCogc2VsU3RhcnQgPSB2aWV3KCktPnNlbGVjdGlvblN0YXJ0KCk7
CiAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc2VsZWN0aW9uLCBkb24ndCB0cnkgdG8gZ2V0IHRoZSBz
ZWxlY3Rpb24ncyBjb250YWluaW5nIGJsb2NrLiAKICAgICAvLyBJZiB3ZSBkbywgd2UnbGwgY3Jh
c2guCkBAIC0xNTY4LDEwICsxNTY3LDEwIEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpmaWxsSW5s
aW5lU2VsZWN0aW8KICAgICAgICAgaWYgKCFjb250YWluc1N0YXJ0ICYmICFsYXN0U2VsZWN0ZWRM
aW5lICYmCiAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvblN0YXJ0ICYm
IHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uQm90aCkKICAgICAgICAgICAgIHJlc3VsdC51
bml0ZUNlbnRlcihmaWxsVmVydGljYWxTZWxlY3Rpb25HYXAobGFzdFRvcCwgbGFzdExlZnQsIGxh
c3RSaWdodCwgdHkgKyBzZWxUb3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJvb3RCbG9jaywgYmxvY2tYLCBibG9ja1ksIGkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9v
dEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgcGFpbnRJbmZvKSk7CiAKLSAgICAgICAgaWYgKCFpIHx8
IHR5ICsgc2VsVG9wIDwgaS0+ci5ib3R0b20oKSAmJiB0eSArIHNlbFRvcCArIHNlbEhlaWdodCA+
IGktPnIueSgpKQotICAgICAgICAgICAgcmVzdWx0LnVuaXRlKGN1cnItPmZpbGxMaW5lU2VsZWN0
aW9uR2FwKHNlbFRvcCwgc2VsSGVpZ2h0LCByb290QmxvY2ssIGJsb2NrWCwgYmxvY2tZLCB0eCwg
dHksIGkpKTsKKyAgICAgICAgaWYgKCFwYWludEluZm8gfHwgdHkgKyBzZWxUb3AgPCBwYWludElu
Zm8tPnJlY3QuYm90dG9tKCkgJiYgdHkgKyBzZWxUb3AgKyBzZWxIZWlnaHQgPiBwYWludEluZm8t
PnJlY3QueSgpKQorICAgICAgICAgICAgcmVzdWx0LnVuaXRlKGN1cnItPmZpbGxMaW5lU2VsZWN0
aW9uR2FwKHNlbFRvcCwgc2VsSGVpZ2h0LCByb290QmxvY2ssIGJsb2NrWCwgYmxvY2tZLCB0eCwg
dHksIHBhaW50SW5mbykpOwogCiAgICAgICAgIGxhc3RTZWxlY3RlZExpbmUgPSBjdXJyOwogICAg
IH0KQEAgLTE1ODksMTUgKzE1ODgsMTUgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmZpbGxJbmxp
bmVTZWxlY3RpbwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUdhcFJlY3RzIFJlbmRlckJsb2Nr
OjpmaWxsQmxvY2tTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGludCBibG9j
a1gsIGludCBibG9ja1ksIGludCB0eCwgaW50IHR5LCBpbnQmIGxhc3RUb3AsIGludCYgbGFzdExl
ZnQsIGludCYgbGFzdFJpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUGFpbnRJbmZvKiBpKQorR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmZpbGxCbG9j
a1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IGJsb2NrWCwgaW50IGJs
b2NrWSwgaW50IHR4LCBpbnQgdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQmIGxhc3RUb3AsIGludCYgbGFzdExlZnQsIGludCYgbGFzdFJpZ2h0LCBj
b25zdCBQYWludEluZm8qIHBhaW50SW5mbykKIHsKICAgICBHYXBSZWN0cyByZXN1bHQ7Ci0gICAg
CisKICAgICAvLyBHbyBhaGVhZCBhbmQganVtcCByaWdodCB0byB0aGUgZmlyc3QgYmxvY2sgY2hp
bGQgdGhhdCBjb250YWlucyBzb21lIHNlbGVjdGVkIG9iamVjdHMuCiAgICAgUmVuZGVyT2JqZWN0
KiBjdXJyOwogICAgIGZvciAoY3VyciA9IGZpcnN0Q2hpbGQoKTsgY3VyciAmJiBjdXJyLT5zZWxl
Y3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbk5vbmU7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygp
KTsKLSAgICAKKwogICAgIGZvciAoYm9vbCBzYXdTZWxlY3Rpb25FbmQgPSBmYWxzZTsgY3VyciAm
JiAhc2F3U2VsZWN0aW9uRW5kOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewogICAgICAg
ICBTZWxlY3Rpb25TdGF0ZSBjaGlsZFN0YXRlID0gY3Vyci0+c2VsZWN0aW9uU3RhdGUoKTsKICAg
ICAgICAgaWYgKGNoaWxkU3RhdGUgPT0gU2VsZWN0aW9uQm90aCB8fCBjaGlsZFN0YXRlID09IFNl
bGVjdGlvbkVuZCkKQEAgLTE2MDUsNyArMTYwNCw3IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpm
aWxsQmxvY2tTZWxlY3Rpb24KIAogICAgICAgICBpZiAoY3Vyci0+aXNGbG9hdGluZ09yUG9zaXRp
b25lZCgpKQogICAgICAgICAgICAgY29udGludWU7IC8vIFdlIG11c3QgYmUgYSBub3JtYWwgZmxv
dyBvYmplY3QgaW4gb3JkZXIgdG8gZXZlbiBiZSBjb25zaWRlcmVkLgotICAgICAgICAKKwogICAg
ICAgICBpZiAoY3Vyci0+aXNSZWxQb3NpdGlvbmVkKCkgJiYgY3Vyci0+bGF5ZXIoKSkgewogICAg
ICAgICAgICAgLy8gSWYgdGhlIHJlbHBvc2l0aW9uIG9mZnNldCBpcyBhbnl0aGluZyBvdGhlciB0
aGFuIDAsIHRoZW4gdHJlYXQgdGhpcyBqdXN0IGxpa2UgYW4gYWJzb2x1dGUgcG9zaXRpb25lZCBl
bGVtZW50LgogICAgICAgICAgICAgLy8gSnVzdCBkaXNyZWdhcmQgaXQgY29tcGxldGVseS4KQEAg
LTE2MjMsNyArMTYyMiw3IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpmaWxsQmxvY2tTZWxlY3Rp
b24KICAgICAgICAgICAgIGlmIChjaGlsZFN0YXRlID09IFNlbGVjdGlvbkVuZCB8fCBjaGlsZFN0
YXRlID09IFNlbGVjdGlvbkluc2lkZSkKICAgICAgICAgICAgICAgICAvLyBGaWxsIHRoZSBnYXAg
YWJvdmUgdGhlIG9iamVjdC4KICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVDZW50ZXIoZmls
bFZlcnRpY2FsU2VsZWN0aW9uR2FwKGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0UmlnaHQsIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHkgKyBjdXJyLT55UG9zKCksIHJvb3RCbG9jaywgYmxvY2tYLCBibG9ja1ksIGkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
ICsgY3Vyci0+eVBvcygpLCByb290QmxvY2ssIGJsb2NrWCwgYmxvY2tZLCBwYWludEluZm8pKTsK
IAogICAgICAgICAgICAgLy8gT25seSBmaWxsIHNpZGUgZ2FwcyBmb3Igb2JqZWN0cyB0aGF0IHBh
aW50IHRoZWlyIG93biBzZWxlY3Rpb24gaWYgd2Uga25vdyBmb3Igc3VyZSB0aGUgc2VsZWN0aW9u
IGlzIGdvaW5nIHRvIGV4dGVuZCBhbGwgdGhlIHdheSAqcGFzdCoKICAgICAgICAgICAgIC8vIG91
ciBvYmplY3QuICBXZSBrbm93IHRoaXMgaWYgdGhlIHNlbGVjdGlvbiBkaWQgbm90IGVuZCBpbnNp
ZGUgb3VyIG9iamVjdC4KQEAgLTE2MzMsMTEgKzE2MzIsMTEgQEAgR2FwUmVjdHMgUmVuZGVyQmxv
Y2s6OmZpbGxCbG9ja1NlbGVjdGlvbgogICAgICAgICAgICAgLy8gRmlsbCBzaWRlIGdhcHMgb24g
dGhpcyBvYmplY3QgYmFzZWQgb2ZmIGl0cyBzdGF0ZS4KICAgICAgICAgICAgIGJvb2wgbGVmdEdh
cCwgcmlnaHRHYXA7CiAgICAgICAgICAgICBnZXRIb3Jpem9udGFsU2VsZWN0aW9uR2FwSW5mbyhj
aGlsZFN0YXRlLCBsZWZ0R2FwLCByaWdodEdhcCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAg
ICAgaWYgKGxlZnRHYXApCi0gICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlTGVmdChmaWxsTGVm
dFNlbGVjdGlvbkdhcCh0aGlzLCBjdXJyLT54UG9zKCksIGN1cnItPnlQb3MoKSwgY3Vyci0+aGVp
Z2h0KCksIHJvb3RCbG9jaywgYmxvY2tYLCBibG9ja1ksIHR4LCB0eSwgaSkpOworICAgICAgICAg
ICAgICAgIHJlc3VsdC51bml0ZUxlZnQoZmlsbExlZnRTZWxlY3Rpb25HYXAodGhpcywgY3Vyci0+
eFBvcygpLCBjdXJyLT55UG9zKCksIGN1cnItPmhlaWdodCgpLCByb290QmxvY2ssIGJsb2NrWCwg
YmxvY2tZLCB0eCwgdHksIHBhaW50SW5mbykpOwogICAgICAgICAgICAgaWYgKHJpZ2h0R2FwKQot
ICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZVJpZ2h0KGZpbGxSaWdodFNlbGVjdGlvbkdhcCh0
aGlzLCBjdXJyLT54UG9zKCkgKyBjdXJyLT53aWR0aCgpLCBjdXJyLT55UG9zKCksIGN1cnItPmhl
aWdodCgpLCByb290QmxvY2ssIGJsb2NrWCwgYmxvY2tZLCB0eCwgdHksIGkpKTsKKyAgICAgICAg
ICAgICAgICByZXN1bHQudW5pdGVSaWdodChmaWxsUmlnaHRTZWxlY3Rpb25HYXAodGhpcywgY3Vy
ci0+eFBvcygpICsgY3Vyci0+d2lkdGgoKSwgY3Vyci0+eVBvcygpLCBjdXJyLT5oZWlnaHQoKSwg
cm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgdHgsIHR5LCBwYWludEluZm8pKTsKIAogICAgICAg
ICAgICAgLy8gVXBkYXRlIGxhc3RUb3AgdG8gYmUganVzdCB1bmRlcm5lYXRoIHRoZSBvYmplY3Qu
ICBsYXN0TGVmdCBhbmQgbGFzdFJpZ2h0IGV4dGVuZCBhcyBmYXIgYXMKICAgICAgICAgICAgIC8v
IHRoZXkgY2FuIHdpdGhvdXQgYnVtcGluZyBpbnRvIGZsb2F0aW5nIG9yIHBvc2l0aW9uZWQgb2Jq
ZWN0cy4gIElkZWFsbHkgdGhleSB3aWxsIGdvIHJpZ2h0IHVwCkBAIC0xNjQ1LDM1ICsxNjQ0LDMy
IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpmaWxsQmxvY2tTZWxlY3Rpb24KICAgICAgICAgICAg
IGxhc3RUb3AgPSAodHkgLSBibG9ja1kpICsgKGN1cnItPnlQb3MoKSArIGN1cnItPmhlaWdodCgp
KTsKICAgICAgICAgICAgIGxhc3RMZWZ0ID0gbGVmdFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ss
IGN1cnItPnlQb3MoKSArIGN1cnItPmhlaWdodCgpKTsKICAgICAgICAgICAgIGxhc3RSaWdodCA9
IHJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgY3Vyci0+eVBvcygpICsgY3Vyci0+aGVp
Z2h0KCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNoaWxkU3RhdGUgIT0gU2VsZWN0
aW9uTm9uZSkKKyAgICAgICAgfSBlbHNlIGlmIChjaGlsZFN0YXRlICE9IFNlbGVjdGlvbk5vbmUp
CiAgICAgICAgICAgICAvLyBXZSBtdXN0IGJlIGEgYmxvY2sgdGhhdCBoYXMgc29tZSBzZWxlY3Rl
ZCBvYmplY3QgaW5zaWRlIGl0LiAgR28gYWhlYWQgYW5kIHJlY3VyLgogICAgICAgICAgICAgcmVz
dWx0LnVuaXRlKHN0YXRpY19jYXN0PFJlbmRlckJsb2NrKj4oY3VyciktPmZpbGxTZWxlY3Rpb25H
YXBzKHJvb3RCbG9jaywgYmxvY2tYLCBibG9ja1ksIHR4ICsgY3Vyci0+eFBvcygpLCB0eSArIGN1
cnItPnlQb3MoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFRvcCwgbGFzdExlZnQsIGxhc3RS
aWdodCwgaSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0Umln
aHQsIHBhaW50SW5mbykpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1JbnRSZWN0
IFJlbmRlckJsb2NrOjpmaWxsSG9yaXpvbnRhbFNlbGVjdGlvbkdhcChSZW5kZXJPYmplY3QqIHNl
bE9iaiwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQYWludEluZm8q
IGkpCitJbnRSZWN0IFJlbmRlckJsb2NrOjpmaWxsSG9yaXpvbnRhbFNlbGVjdGlvbkdhcChSZW5k
ZXJPYmplY3QqIHNlbE9iaiwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgd2lkdGgsIGludCBoZWln
aHQsIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQogewogICAgIGlmICh3aWR0aCA8PSAwIHx8
IGhlaWdodCA8PSAwKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogICAgIEludFJlY3QgZ2Fw
UmVjdCh4UG9zLCB5UG9zLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBpZiAoaSkKLSAgICAgICAgaS0+
cC0+ZmlsbFJlY3QoZ2FwUmVjdCwgc2VsT2JqLT5zZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSk7
CisgICAgaWYgKHBhaW50SW5mbykKKyAgICAgICAgcGFpbnRJbmZvLT5jb250ZXh0LT5maWxsUmVj
dChnYXBSZWN0LCBzZWxPYmotPnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKICAgICByZXR1
cm4gZ2FwUmVjdDsKIH0KIAotSW50UmVjdCBSZW5kZXJCbG9jazo6ZmlsbFZlcnRpY2FsU2VsZWN0
aW9uR2FwKGludCBsYXN0VG9wLCBpbnQgbGFzdExlZnQsIGludCBsYXN0UmlnaHQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJvdHRvbVksIFJlbmRl
ckJsb2NrKiByb290QmxvY2ssIGludCBibG9ja1gsIGludCBibG9ja1ksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGFpbnRJbmZvKiBpKQorSW50
UmVjdCBSZW5kZXJCbG9jazo6ZmlsbFZlcnRpY2FsU2VsZWN0aW9uR2FwKGludCBsYXN0VG9wLCBp
bnQgbGFzdExlZnQsIGludCBsYXN0UmlnaHQsIGludCBib3R0b21ZLCBSZW5kZXJCbG9jayogcm9v
dEJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBibG9ja1gsIGludCBibG9ja1ksIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQogewogICAg
IGludCB0b3AgPSBibG9ja1kgKyBsYXN0VG9wOwogICAgIGludCBoZWlnaHQgPSBib3R0b21ZIC0g
dG9wOwogICAgIGlmIChoZWlnaHQgPD0gMCkKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKLSAg
ICAgICAgCisKICAgICAvLyBHZXQgdGhlIHNlbGVjdGlvbiBvZmZzZXRzIGZvciB0aGUgYm90dG9t
IG9mIHRoZSBnYXAKICAgICBpbnQgbGVmdCA9IGJsb2NrWCArIG1heChsYXN0TGVmdCwgbGVmdFNl
bGVjdGlvbk9mZnNldChyb290QmxvY2ssIGJvdHRvbVkpKTsKICAgICBpbnQgcmlnaHQgPSBibG9j
a1ggKyBtaW4obGFzdFJpZ2h0LCByaWdodFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGJvdHRv
bVkpKTsKQEAgLTE2ODIsMTIgKzE2NzgsMTMgQEAgSW50UmVjdCBSZW5kZXJCbG9jazo6ZmlsbFZl
cnRpY2FsU2VsZWN0aQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCiAgICAgSW50UmVjdCBn
YXBSZWN0KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgaWYgKGkpCi0gICAgICAgIGkt
PnAtPmZpbGxSZWN0KGdhcFJlY3QsIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKKyAgICBp
ZiAocGFpbnRJbmZvKQorICAgICAgICBwYWludEluZm8tPmNvbnRleHQtPmZpbGxSZWN0KGdhcFJl
Y3QsIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKICAgICByZXR1cm4gZ2FwUmVjdDsKIH0K
IAotSW50UmVjdCBSZW5kZXJCbG9jazo6ZmlsbExlZnRTZWxlY3Rpb25HYXAoUmVuZGVyT2JqZWN0
KiBzZWxPYmosIGludCB4UG9zLCBpbnQgeVBvcywgaW50IGhlaWdodCwgUmVuZGVyQmxvY2sqIHJv
b3RCbG9jaywgaW50IGJsb2NrWCwgaW50IGJsb2NrWSwgaW50IHR4LCBpbnQgdHksIGNvbnN0IFBh
aW50SW5mbyogaSkKK0ludFJlY3QgUmVuZGVyQmxvY2s6OmZpbGxMZWZ0U2VsZWN0aW9uR2FwKFJl
bmRlck9iamVjdCogc2VsT2JqLCBpbnQgeFBvcywgaW50IHlQb3MsIGludCBoZWlnaHQsIFJlbmRl
ckJsb2NrKiByb290QmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgYmxvY2tYLCBpbnQgYmxvY2tZLCBpbnQgdHgsIGludCB0eSwgY29uc3QgUGFpbnRJ
bmZvKiBwYWludEluZm8pCiB7CiAgICAgaW50IHRvcCA9IHlQb3MgKyB0eTsKICAgICBpbnQgbGVm
dCA9IGJsb2NrWCArIG1heChsZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgeVBvcyksIGxl
ZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCB5UG9zICsgaGVpZ2h0KSk7CkBAIC0xNjk2LDEy
ICsxNjkzLDEzIEBAIEludFJlY3QgUmVuZGVyQmxvY2s6OmZpbGxMZWZ0U2VsZWN0aW9uR2EKICAg
ICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAogICAgIEludFJlY3QgZ2FwUmVjdChsZWZ0LCB0b3As
IHdpZHRoLCBoZWlnaHQpOwotICAgIGlmIChpKQotICAgICAgICBpLT5wLT5maWxsUmVjdChnYXBS
ZWN0LCBzZWxPYmotPnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKKyAgICBpZiAocGFpbnRJ
bmZvKQorICAgICAgICBwYWludEluZm8tPmNvbnRleHQtPmZpbGxSZWN0KGdhcFJlY3QsIHNlbE9i
ai0+c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOwogICAgIHJldHVybiBnYXBSZWN0OwogfQog
Ci1JbnRSZWN0IFJlbmRlckJsb2NrOjpmaWxsUmlnaHRTZWxlY3Rpb25HYXAoUmVuZGVyT2JqZWN0
KiBzZWxPYmosIGludCB4UG9zLCBpbnQgeVBvcywgaW50IGhlaWdodCwgUmVuZGVyQmxvY2sqIHJv
b3RCbG9jaywgaW50IGJsb2NrWCwgaW50IGJsb2NrWSwgaW50IHR4LCBpbnQgdHksIGNvbnN0IFBh
aW50SW5mbyogaSkKK0ludFJlY3QgUmVuZGVyQmxvY2s6OmZpbGxSaWdodFNlbGVjdGlvbkdhcChS
ZW5kZXJPYmplY3QqIHNlbE9iaiwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgaGVpZ2h0LCBSZW5k
ZXJCbG9jayogcm9vdEJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBibG9ja1gsIGludCBibG9ja1ksIGludCB0eCwgaW50IHR5LCBjb25zdCBQYWlu
dEluZm8qIHBhaW50SW5mbykKIHsKICAgICBpbnQgbGVmdCA9IHhQb3MgKyB0eDsKICAgICBpbnQg
dG9wID0geVBvcyArIHR5OwpAQCAtMTcxMSw4ICsxNzA5LDggQEAgSW50UmVjdCBSZW5kZXJCbG9j
azo6ZmlsbFJpZ2h0U2VsZWN0aW9uRwogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCiAgICAg
SW50UmVjdCBnYXBSZWN0KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgaWYgKGkpCi0g
ICAgICAgIGktPnAtPmZpbGxSZWN0KGdhcFJlY3QsIHNlbE9iai0+c2VsZWN0aW9uQmFja2dyb3Vu
ZENvbG9yKCkpOworICAgIGlmIChwYWludEluZm8pCisgICAgICAgIHBhaW50SW5mby0+Y29udGV4
dC0+ZmlsbFJlY3QoZ2FwUmVjdCwgc2VsT2JqLT5zZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSk7
CiAgICAgcmV0dXJuIGdhcFJlY3Q7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAko
cmV2aXNpb24gMTc0NDcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODMsMTcgKzI4MywxNyBAQCBib29sIFJlbmRlckJveDo6bm9kZUF0UG9p
bnQoSGl0VGVzdFJlc3VsCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwYWludGluZyBzdHVm
ZiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgUmVuZGVyQm94OjpwYWlu
dChQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpCit2b2lkIFJlbmRlckJveDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogewotICAgIF90eCArPSBtX3g7
Ci0gICAgX3R5ICs9IG1feTsKKyAgICB0eCArPSBtX3g7CisgICAgdHkgKz0gbV95OwogCiAgICAg
Ly8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi4gSnVzdCBwYXNzIHBhaW50IHRocm91Z2ggdG8gdGhl
IGNoaWxkcmVuCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPnBhaW50
KGksIF90eCwgX3R5KTsKKyAgICAgICAgY2hpbGQtPnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsK
IH0KIAotdm9pZCBSZW5kZXJCb3g6OnBhaW50Um9vdEJveERlY29yYXRpb25zKFBhaW50SW5mbyYg
aSwgaW50IF90eCwgaW50IF90eSkKK3ZvaWQgUmVuZGVyQm94OjpwYWludFJvb3RCb3hEZWNvcmF0
aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgY29uc3Qg
QmFja2dyb3VuZExheWVyKiBiZ0xheWVyID0gc3R5bGUoKS0+YmFja2dyb3VuZExheWVycygpOwog
ICAgIENvbG9yIGJnQ29sb3IgPSBzdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKTsKQEAgLTMxNywx
NCArMzE3LDEzIEBAIHZvaWQgUmVuZGVyQm94OjpwYWludFJvb3RCb3hEZWNvcmF0aW9ucygKICAg
ICBpZiAodmlldygpLT5mcmFtZVZpZXcoKSkgewogICAgICAgICBydyA9IHZpZXcoKS0+ZnJhbWVW
aWV3KCktPmNvbnRlbnRzV2lkdGgoKTsKICAgICAgICAgcmggPSB2aWV3KCktPmZyYW1lVmlldygp
LT5jb250ZW50c0hlaWdodCgpOwotICAgIH0KLSAgICBlbHNlIHsKKyAgICB9IGVsc2UgewogICAg
ICAgICBydyA9IHZpZXcoKS0+d2lkdGgoKTsKICAgICAgICAgcmggPSB2aWV3KCktPmhlaWdodCgp
OwogICAgIH0KLSAgICAKLSAgICBpbnQgYnggPSBfdHggLSBtYXJnaW5MZWZ0KCk7Ci0gICAgaW50
IGJ5ID0gX3R5IC0gbWFyZ2luVG9wKCk7CisKKyAgICBpbnQgYnggPSB0eCAtIG1hcmdpbkxlZnQo
KTsKKyAgICBpbnQgYnkgPSB0eSAtIG1hcmdpblRvcCgpOwogICAgIGludCBidyA9IG1heCh3ICsg
bWFyZ2luTGVmdCgpICsgbWFyZ2luUmlnaHQoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0
KCksIHJ3KTsKICAgICBpbnQgYmggPSBtYXgoaCArIG1hcmdpblRvcCgpICsgbWFyZ2luQm90dG9t
KCkgKyBib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpLCByaCk7CiAKQEAgLTMzMiw0OSArMzMx
LDQ5IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludFJvb3RCb3hEZWNvcmF0aW9ucygKICAgICAvLyAi
IFRoZSBiYWNrZ3JvdW5kIG9mIHRoZSBib3ggZ2VuZXJhdGVkIGJ5IHRoZSByb290IGVsZW1lbnQg
Y292ZXJzIHRoZSBlbnRpcmUgY2FudmFzLiIKICAgICAvLyBoZW5jZSwgcGFpbnQgdGhlIGJhY2tn
cm91bmQgZXZlbiBpbiB0aGUgbWFyZ2luIGFyZWFzICh1bmxpa2UgZm9yIGV2ZXJ5IG90aGVyIGVs
ZW1lbnQhKQogICAgIC8vIEkganVzdCBsb3ZlIHRoZXNlIGxpdHRsZSBpbmNvbnNpc3RlbmNpZXMg
Li4gOi0oIChEaXJrKQotICAgIGludCBteSA9IG1heChieSwgaS5yLnkoKSk7CisgICAgaW50IG15
ID0gbWF4KGJ5LCBwYWludEluZm8ucmVjdC55KCkpOwogCi0gICAgcGFpbnRCYWNrZ3JvdW5kcyhp
LnAsIGJnQ29sb3IsIGJnTGF5ZXIsIG15LCBpLnIuaGVpZ2h0KCksIGJ4LCBieSwgYncsIGJoKTsK
KyAgICBwYWludEJhY2tncm91bmRzKHBhaW50SW5mby5jb250ZXh0LCBiZ0NvbG9yLCBiZ0xheWVy
LCBteSwgcGFpbnRJbmZvLnJlY3QuaGVpZ2h0KCksIGJ4LCBieSwgYncsIGJoKTsKIAogICAgIGlm
IChzdHlsZSgpLT5oYXNCb3JkZXIoKSAmJiBzdHlsZSgpLT5kaXNwbGF5KCkgIT0gSU5MSU5FKQot
ICAgICAgICBwYWludEJvcmRlciggaS5wLCBfdHgsIF90eSwgdywgaCwgc3R5bGUoKSApOworICAg
ICAgICBwYWludEJvcmRlcihwYWludEluZm8uY29udGV4dCwgdHgsIHR5LCB3LCBoLCBzdHlsZSgp
KTsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBp
LCBpbnQgX3R4LCBpbnQgX3R5KQordm9pZCBSZW5kZXJCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMo
UGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogewotICAgIGlmICghc2hvdWxk
UGFpbnRXaXRoaW5Sb290KGkpKQorICAgIGlmICghc2hvdWxkUGFpbnRXaXRoaW5Sb290KHBhaW50
SW5mbykpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChpc1Jvb3QoKSkKLSAgICAgICAgcmV0
dXJuIHBhaW50Um9vdEJveERlY29yYXRpb25zKGksIF90eCwgX3R5KTsKLSAgICAKKyAgICAgICAg
cmV0dXJuIHBhaW50Um9vdEJveERlY29yYXRpb25zKHBhaW50SW5mbywgdHgsIHR5KTsKKwogICAg
IGludCB3ID0gd2lkdGgoKTsKICAgICBpbnQgaCA9IGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEo
KSArIGJvcmRlckJvdHRvbUV4dHJhKCk7Ci0gICAgX3R5IC09IGJvcmRlclRvcEV4dHJhKCk7Cisg
ICAgdHkgLT0gYm9yZGVyVG9wRXh0cmEoKTsKIAotICAgIGludCBteSA9IG1heChfdHksIGkuci55
KCkpOworICAgIGludCBteSA9IG1heCh0eSwgcGFpbnRJbmZvLnJlY3QueSgpKTsKICAgICBpbnQg
bWg7Ci0gICAgaWYgKF90eSA8IGkuci55KCkpCi0gICAgICAgIG1oID0gbWF4KDAsIGggLSAoaS5y
LnkoKSAtIF90eSkpOworICAgIGlmICh0eSA8IHBhaW50SW5mby5yZWN0LnkoKSkKKyAgICAgICAg
bWggPSBtYXgoMCwgaCAtIChwYWludEluZm8ucmVjdC55KCkgLSB0eSkpOwogICAgIGVsc2UKLSAg
ICAgICAgbWggPSBtaW4oaS5yLmhlaWdodCgpLCBoKTsKKyAgICAgICAgbWggPSBtaW4ocGFpbnRJ
bmZvLnJlY3QuaGVpZ2h0KCksIGgpOwogCiAgICAgLy8gSWYgd2UgaGF2ZSBhIG5hdGl2ZSB0aGVt
ZSBhcHBlYXJhbmNlLCBwYWludCB0aGF0IGJlZm9yZSBwYWludGluZyBvdXIgYmFja2dyb3VuZC4g
IAogICAgIC8vIFRoZSB0aGVtZSB3aWxsIHRlbGwgdXMgd2hldGhlciBvciBub3Qgd2Ugc2hvdWxk
IGFsc28gcGFpbnQgdGhlIENTUyBiYWNrZ3JvdW5kLgotICAgIGJvb2wgdGhlbWVQYWludGVkID0g
c3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpICYmICF0aGVtZSgpLT5wYWludCh0aGlzLCBpLCBJbnRS
ZWN0KF90eCwgX3R5LCB3LCBoKSk7CisgICAgYm9vbCB0aGVtZVBhaW50ZWQgPSBzdHlsZSgpLT5o
YXNBcHBlYXJhbmNlKCkgJiYgIXRoZW1lKCktPnBhaW50KHRoaXMsIHBhaW50SW5mbywgSW50UmVj
dCh0eCwgdHksIHcsIGgpKTsKICAgICBpZiAoIXRoZW1lUGFpbnRlZCkgewogICAgICAgICAvLyBU
aGUgPGJvZHk+IG9ubHkgcGFpbnRzIGl0cyBiYWNrZ3JvdW5kIGlmIHRoZSByb290IGVsZW1lbnQg
aGFzIGRlZmluZWQgYSBiYWNrZ3JvdW5kCiAgICAgICAgIC8vIGluZGVwZW5kZW50IG9mIHRoZSBi
b2R5LiAgR28gdGhyb3VnaCB0aGUgRE9NIHRvIGdldCB0byB0aGUgcm9vdCBlbGVtZW50J3MgcmVu
ZGVyIG9iamVjdCwKICAgICAgICAgLy8gc2luY2UgdGhlIHJvb3QgY291bGQgYmUgaW5saW5lIGFu
ZCB3cmFwcGVkIGluIGFuIGFub255bW91cyBibG9jay4KICAgICAgICAgaWYgKCFpc0JvZHkoKSB8
fCAhZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSB8fCBkb2N1bWVudCgpLT5kb2N1bWVudEVs
ZW1lbnQoKS0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+aGFzQmFja2dyb3VuZCgpKQotICAgICAgICAg
ICAgcGFpbnRCYWNrZ3JvdW5kcyhpLnAsIHN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpLCBzdHls
ZSgpLT5iYWNrZ3JvdW5kTGF5ZXJzKCksIG15LCBtaCwgX3R4LCBfdHksIHcsIGgpOworICAgICAg
ICAgICAgcGFpbnRCYWNrZ3JvdW5kcyhwYWludEluZm8uY29udGV4dCwgc3R5bGUoKS0+YmFja2dy
b3VuZENvbG9yKCksIHN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKSwgbXksIG1oLCB0eCwgdHks
IHcsIGgpOwogICAgICAgICBpZiAoc3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpKQotICAgICAgICAg
ICAgdGhlbWUoKS0+cGFpbnREZWNvcmF0aW9ucyh0aGlzLCBpLCBJbnRSZWN0KF90eCwgX3R5LCB3
LCBoKSk7CisgICAgICAgICAgICB0aGVtZSgpLT5wYWludERlY29yYXRpb25zKHRoaXMsIHBhaW50
SW5mbywgSW50UmVjdCh0eCwgdHksIHcsIGgpKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBUaGUg
dGhlbWUgd2lsbCB0ZWxsIHVzIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBhbHNvIHBhaW50IHRo
ZSBDU1MgYm9yZGVyLgotICAgIGlmICgoIXN0eWxlKCktPmhhc0FwcGVhcmFuY2UoKSB8fCAoIXRo
ZW1lUGFpbnRlZCAmJiB0aGVtZSgpLT5wYWludEJvcmRlck9ubHkodGhpcywgaSwgSW50UmVjdChf
dHgsIF90eSwgdywgaCkpKSkgJiYgc3R5bGUoKS0+aGFzQm9yZGVyKCkpCi0gICAgICAgIHBhaW50
Qm9yZGVyKGkucCwgX3R4LCBfdHksIHcsIGgsIHN0eWxlKCkpOworICAgIGlmICgoIXN0eWxlKCkt
Pmhhc0FwcGVhcmFuY2UoKSB8fCAoIXRoZW1lUGFpbnRlZCAmJiB0aGVtZSgpLT5wYWludEJvcmRl
ck9ubHkodGhpcywgcGFpbnRJbmZvLCBJbnRSZWN0KHR4LCB0eSwgdywgaCkpKSkgJiYgc3R5bGUo
KS0+aGFzQm9yZGVyKCkpCisgICAgICAgIHBhaW50Qm9yZGVyKHBhaW50SW5mby5jb250ZXh0LCB0
eCwgdHksIHcsIGgsIHN0eWxlKCkpOwogfQogCiB2b2lkIFJlbmRlckJveDo6cGFpbnRCYWNrZ3Jv
dW5kcyhHcmFwaGljc0NvbnRleHQqIHAsIGNvbnN0IENvbG9yJiBjLCBjb25zdCBCYWNrZ3JvdW5k
TGF5ZXIqIGJnTGF5ZXIsIGludCBjbGlweSwgaW50IGNsaXBoLCBpbnQgX3R4LCBpbnQgX3R5LCBp
bnQgdywgaW50IGhlaWdodCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiAxNzQ0
NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTEsOCArMTUxLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IHN0YXRpY1koKSBjb25zdCB7
IHJldHVybiBtX3N0YXRpY1k7IH0KIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBwYWlu
dEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSk7Ci0gICAgdm9p
ZCBwYWludFJvb3RCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkp
OworICAgIHZpcnR1YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGludCB0
eCwgaW50IHR5KTsKKyAgICB2b2lkIHBhaW50Um9vdEJveERlY29yYXRpb25zKFBhaW50SW5mbyYs
IGludCB0eCwgaW50IHR5KTsKIAogICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kcyhHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBDb2xvciYsIGNvbnN0IEJhY2tncm91bmRMYXllciosIGludCBjbGlweSwg
aW50IGNsaXBoLCBpbnQgX3R4LCBpbnQgX3R5LCBpbnQgdywgaW50IGgpOwogICAgIHZvaWQgcGFp
bnRCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IENvbG9yJiwgY29uc3QgQmFja2dy
b3VuZExheWVyKiwgaW50IGNsaXB5LCBpbnQgY2xpcGgsIGludCBfdHgsIGludCBfdHksIGludCB3
LCBpbnQgaCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAJKHJldmlzaW9uIDE3
NDQ4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE2LDggKzExNiw4IEBAIHZvaWQgUmVuZGVyQnV0dG9uOjpwYWludE9iamVjdChQYWlu
dEluZm8KICAgICAgICAgICAgIHdpZHRoKCkgLSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgp
LCBoZWlnaHQoKSAtIGJvcmRlckJvdHRvbSgpIC0gYm9yZGVyVG9wKCkpOwogICAgICAgICBpZiAo
Y2xpcFJlY3Qud2lkdGgoKSA9PSAwIHx8IGNsaXBSZWN0LmhlaWdodCgpID09IDApCiAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIHBhaW50SW5mby5wLT5zYXZlKCk7Ci0gICAgICAgIHBhaW50
SW5mby5wLT5jbGlwKGNsaXBSZWN0KTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUo
KTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAoY2xpcFJlY3QpOwogICAgIH0KIAog
ICAgIC8vIFBhaW50IHRoZSBjaGlsZHJlbi4KQEAgLTEyNSw3ICsxMjUsNyBAQCB2b2lkIFJlbmRl
ckJ1dHRvbjo6cGFpbnRPYmplY3QoUGFpbnRJbmZvCiAKICAgICAvLyBQb3AgdGhlIGNsaXAuCiAg
ICAgaWYgKG1faW5uZXIgJiYgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5k
KQotICAgICAgICBwYWludEluZm8ucC0+cmVzdG9yZSgpOworICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+cmVzdG9yZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCShyZXZpc2lvbiAxNzQ0OCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsMTQgKzgy
LDE0IEBAIHZvaWQgUmVuZGVyRmllbGRzZXQ6OnBhaW50Qm94RGVjb3JhdGlvbnMKICAgICBoIC09
IHlPZmY7CiAgICAgdHkgKz0geU9mZiAtIGJvcmRlclRvcEV4dHJhKCk7CiAKLSAgICBpbnQgbXkg
PSBtYXgodHksIHBhaW50SW5mby5yLnkoKSk7Ci0gICAgaW50IGVuZCA9IG1pbihwYWludEluZm8u
ci5ib3R0b20oKSwgdHkgKyBoKTsKKyAgICBpbnQgbXkgPSBtYXgodHksIHBhaW50SW5mby5yZWN0
LnkoKSk7CisgICAgaW50IGVuZCA9IG1pbihwYWludEluZm8ucmVjdC5ib3R0b20oKSwgdHkgKyBo
KTsKICAgICBpbnQgbWggPSBlbmQgLSBteTsKIAotICAgIHBhaW50QmFja2dyb3VuZChwYWludElu
Zm8ucCwgc3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCksIHN0eWxlKCktPmJhY2tncm91bmRMYXll
cnMoKSwgbXksIG1oLCB0eCwgdHksIHcsIGgpOworICAgIHBhaW50QmFja2dyb3VuZChwYWludElu
Zm8uY29udGV4dCwgc3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCksIHN0eWxlKCktPmJhY2tncm91
bmRMYXllcnMoKSwgbXksIG1oLCB0eCwgdHksIHcsIGgpOwogCiAgICAgaWYgKHN0eWxlKCktPmhh
c0JvcmRlcigpKQotICAgICAgICBwYWludEJvcmRlck1pbnVzTGVnZW5kKHBhaW50SW5mby5wLCB0
eCwgdHksIHcsIGgsIHN0eWxlKCksIGxlZ2VuZC0+eFBvcygpLCBsZWdlbmQtPndpZHRoKCkpOwor
ICAgICAgICBwYWludEJvcmRlck1pbnVzTGVnZW5kKHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHks
IHcsIGgsIHN0eWxlKCksIGxlZ2VuZC0+eFBvcygpLCBsZWdlbmQtPndpZHRoKCkpOwogfQogCiB2
b2lkIFJlbmRlckZpZWxkc2V0OjpwYWludEJvcmRlck1pbnVzTGVnZW5kKEdyYXBoaWNzQ29udGV4
dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoLApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNp
b24gMTc0NDgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw4ICsxNDcsOCBAQCB2b2lkIFJlbmRlckZpbGVVcGxv
YWRDb250cm9sOjpwYWludE9iamVjCiAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKSAt
IGJvcmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCksIGhlaWdodCgpIC0gYm9yZGVyQm90dG9tKCkg
LSBib3JkZXJUb3AoKSk7CiAgICAgICAgIGlmIChjbGlwUmVjdC53aWR0aCgpID09IDAgfHwgY2xp
cFJlY3QuaGVpZ2h0KCkgPT0gMCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgcGFpbnRJ
bmZvLnAtPnNhdmUoKTsKLSAgICAgICAgcGFpbnRJbmZvLnAtPmNsaXAoY2xpcFJlY3QpOworICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgICAgICBwYWludEluZm8uY29udGV4
dC0+Y2xpcChjbGlwUmVjdCk7CiAgICAgfQogCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlRm9yZWdyb3VuZCkgewpAQCAtMTY3LDExICsxNjcsMTEgQEAgdm9pZCBSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplYwogICAgICAgICBSZW5kZXJCdXR0b24qIGJ1dHRv
blJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyQnV0dG9uKj4obV9idXR0b24tPnJlbmRlcmVy
KCkpOwogICAgICAgICBpbnQgdGV4dFkgPSBidXR0b25SZW5kZXJlci0+YWJzb2x1dGVCb3VuZGlu
Z0JveFJlY3QoKS55KCkgKyBidXR0b25SZW5kZXJlci0+bWFyZ2luVG9wKCkgKyBidXR0b25SZW5k
ZXJlci0+Ym9yZGVyVG9wKCkgKyBidXR0b25SZW5kZXJlci0+cGFkZGluZ1RvcCgpICsgYnV0dG9u
UmVuZGVyZXItPmJhc2VsaW5lUG9zaXRpb24odHJ1ZSwgZmFsc2UpOwogCi0gICAgICAgIHBhaW50
SW5mby5wLT5zZXRGb250KHN0eWxlKCktPmZvbnQoKSk7Ci0gICAgICAgIHBhaW50SW5mby5wLT5z
ZXRQZW4oc3R5bGUoKS0+Y29sb3IoKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRG
b250KHN0eWxlKCktPmZvbnQoKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRQZW4o
c3R5bGUoKS0+Y29sb3IoKSk7CiAKICAgICAgICAgLy8gRHJhdyB0aGUgZmlsZW5hbWUKLSAgICAg
ICAgcGFpbnRJbmZvLnAtPmRyYXdUZXh0KHRleHRSdW4sIEludFBvaW50KHRleHRYLCB0ZXh0WSkp
OworICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd1RleHQodGV4dFJ1biwgSW50UG9pbnQo
dGV4dFgsIHRleHRZKSk7CiAKICAgICAgICAgaWYgKG1fZmlsZUNob29zZXItPmljb24oKSkgewog
ICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHdoZXJlIHRoZSBpY29uIHNob3VsZCBiZSBwbGFjZWQK
QEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9i
amVjCiAgICAgICAgICAgICAgICAgaWNvblggPSBjb250ZW50TGVmdCArIGNvbnRlbnRXaWR0aCgp
IC0gbV9idXR0b24tPnJlbmRlcmVyKCktPndpZHRoKCkgLSBhZnRlckJ1dHRvblNwYWNpbmcgLSBp
Y29uV2lkdGg7CiAKICAgICAgICAgICAgIC8vIERyYXcgdGhlIGZpbGUgaWNvbgotICAgICAgICAg
ICAgbV9maWxlQ2hvb3Nlci0+aWNvbigpLT5wYWludChwYWludEluZm8ucCwgSW50UmVjdChpY29u
WCwgaWNvblksIGljb25XaWR0aCwgaWNvbkhlaWdodCkpOworICAgICAgICAgICAgbV9maWxlQ2hv
b3Nlci0+aWNvbigpLT5wYWludChwYWludEluZm8uY29udGV4dCwgSW50UmVjdChpY29uWCwgaWNv
blksIGljb25XaWR0aCwgaWNvbkhlaWdodCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xOTIs
NyArMTkyLDcgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplYwogCiAg
ICAgLy8gUG9wIHRoZSBjbGlwLgogICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZUZvcmVncm91bmQgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFj
a2dyb3VuZHMpCi0gICAgICAgIHBhaW50SW5mby5wLT5yZXN0b3JlKCk7CisgICAgICAgIHBhaW50
SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2w6OmNhbGNNaW5NYXhXaWR0aCgpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93LmNwcAkocmV2
aXNpb24gMTc0NDgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBSZW5kZXJGbG93KiBSZW5kZXJGbG93Ojpjb250aW51
YXRpb25CZWZvCiB7CiAgICAgaWYgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQo
KSA9PSB0aGlzKQogICAgICAgICByZXR1cm4gdGhpczsKLSAgICAKKwogICAgIFJlbmRlckZsb3cq
IGN1cnIgPSBjb250aW51YXRpb24oKTsKICAgICBSZW5kZXJGbG93KiBuZXh0VG9MYXN0ID0gdGhp
czsKICAgICBSZW5kZXJGbG93KiBsYXN0ID0gdGhpczsKQEAgLTYzLDEyICs2MywxMiBAQCBSZW5k
ZXJGbG93KiBSZW5kZXJGbG93Ojpjb250aW51YXRpb25CZWZvCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGxhc3Q7CiAgICAgICAgICAgICByZXR1cm4gY3VycjsKICAgICAgICAgfQotICAgICAgICAK
KwogICAgICAgICBuZXh0VG9MYXN0ID0gbGFzdDsKICAgICAgICAgbGFzdCA9IGN1cnI7CiAgICAg
ICAgIGN1cnIgPSBjdXJyLT5jb250aW51YXRpb24oKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAo
IWJlZm9yZUNoaWxkICYmICFsYXN0LT5maXJzdENoaWxkKCkpCiAgICAgICAgIHJldHVybiBuZXh0
VG9MYXN0OwogICAgIHJldHVybiBsYXN0OwpAQCAtODEsMTYgKzgxLDE2IEBAIHZvaWQgUmVuZGVy
Rmxvdzo6YWRkQ2hpbGRXaXRoQ29udGludWF0aW8KICAgICAgICAgICAgICAgICBiZWZvcmVDaGls
ZC0+cGFyZW50KCktPmlzUmVuZGVySW5saW5lKCkpOwogICAgIFJlbmRlckZsb3cqIGJlZm9yZUNo
aWxkUGFyZW50ID0gYmVmb3JlQ2hpbGQgPyBzdGF0aWNfY2FzdDxSZW5kZXJGbG93Kj4oYmVmb3Jl
Q2hpbGQtPnBhcmVudCgpKSA6IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGZsb3ctPmNvbnRpbnVhdGlvbigpID8gZmxvdy0+Y29udGludWF0aW9uKCkgOiBmbG93KTsKLSAg
ICAKKwogICAgIGlmIChuZXdDaGlsZC0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKQogICAgICAg
ICByZXR1cm4gYmVmb3JlQ2hpbGRQYXJlbnQtPmFkZENoaWxkVG9GbG93KG5ld0NoaWxkLCBiZWZv
cmVDaGlsZCk7Ci0gICAgCisKICAgICAvLyBBIGNvbnRpbnVhdGlvbiBhbHdheXMgY29uc2lzdHMg
b2YgdHdvIHBvdGVudGlhbCBjYW5kaWRhdGVzOiBhbiBpbmxpbmUgb3IgYW4gYW5vbnltb3VzCiAg
ICAgLy8gYmxvY2sgYm94IGhvbGRpbmcgYmxvY2sgY2hpbGRyZW4uCiAgICAgYm9vbCBjaGlsZElu
bGluZSA9IG5ld0NoaWxkLT5pc0lubGluZSgpOwogICAgIGJvb2wgYmNwSW5saW5lID0gYmVmb3Jl
Q2hpbGRQYXJlbnQtPmlzSW5saW5lKCk7CiAgICAgYm9vbCBmbG93SW5saW5lID0gZmxvdy0+aXNJ
bmxpbmUoKTsKLSAgICAKKwogICAgIGlmIChmbG93ID09IGJlZm9yZUNoaWxkUGFyZW50KQogICAg
ICAgICByZXR1cm4gZmxvdy0+YWRkQ2hpbGRUb0Zsb3cobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsK
ICAgICBlbHNlIHsKQEAgLTEwMCwxOSArMTAwLDEzIEBAIHZvaWQgUmVuZGVyRmxvdzo6YWRkQ2hp
bGRXaXRoQ29udGludWF0aW8KICAgICAgICAgICAgIHJldHVybiBiZWZvcmVDaGlsZFBhcmVudC0+
YWRkQ2hpbGRUb0Zsb3cobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKICAgICAgICAgZWxzZSBpZiAo
Zmxvd0lubGluZSA9PSBjaGlsZElubGluZSkKICAgICAgICAgICAgIHJldHVybiBmbG93LT5hZGRD
aGlsZFRvRmxvdyhuZXdDaGlsZCwgMCk7IC8vIEp1c3QgdHJlYXQgbGlrZSBhbiBhcHBlbmQuCi0g
ICAgICAgIGVsc2UgCisgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBiZWZvcmVDaGls
ZFBhcmVudC0+YWRkQ2hpbGRUb0Zsb3cobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKICAgICB9CiB9
CiAKLXZvaWQgUmVuZGVyRmxvdzo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0ICpuZXdDaGlsZCwgUmVu
ZGVyT2JqZWN0ICpiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyRmxvdzo6YWRkQ2hpbGQoUmVuZGVy
T2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKLSNpZmRlZiBE
RUJVR19MQVlPVVQKLSAgICBrZERlYnVnKCA2MDQwICkgPDwgcmVuZGVyTmFtZSgpIDw8ICIoUmVu
ZGVyRmxvdyk6OmFkZENoaWxkKCAiIDw8IG5ld0NoaWxkLT5yZW5kZXJOYW1lKCkgPDwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIiwgIiA8PCAoYmVmb3JlQ2hpbGQgPyBiZWZvcmVDaGlsZC0+cmVu
ZGVyTmFtZSgpIDogIjAiKSA8PCAiICkiIDw8IGVuZGw7Ci0gICAga2REZWJ1ZyggNjA0MCApIDw8
ICJjdXJyZW50IGhlaWdodCA9ICIgPDwgbV9oZWlnaHQgPDwgZW5kbDsKLSNlbmRpZgotCiAgICAg
aWYgKGNvbnRpbnVhdGlvbigpKQogICAgICAgICByZXR1cm4gYWRkQ2hpbGRXaXRoQ29udGludWF0
aW9uKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CiAgICAgcmV0dXJuIGFkZENoaWxkVG9GbG93KG5l
d0NoaWxkLCBiZWZvcmVDaGlsZCk7CkBAIC0xMzUsOCArMTI5LDcgQEAgdm9pZCBSZW5kZXJGbG93
OjphdHRhY2hMaW5lQm94KElubGluZUZsbwogICAgIGlmIChtX2xhc3RMaW5lQm94KSB7CiAgICAg
ICAgIG1fbGFzdExpbmVCb3gtPnNldE5leHRMaW5lQm94KGJveCk7CiAgICAgICAgIGJveC0+c2V0
UHJldmlvdXNMaW5lQm94KG1fbGFzdExpbmVCb3gpOwotICAgIH0KLSAgICBlbHNlCisgICAgfSBl
bHNlCiAgICAgICAgIG1fZmlyc3RMaW5lQm94ID0gYm94OwogICAgIElubGluZUZsb3dCb3gqIGxh
c3QgPSBib3g7CiAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBjdXJyID0gYm94OyBjdXJyOyBjdXJy
ID0gY3Vyci0+bmV4dEZsb3dCb3goKSkgewpAQCAtMTc5LDExICsxNzIsMTEgQEAgdm9pZCBSZW5k
ZXJGbG93OjpkZXN0cm95KCkKICAgICBpZiAobV9jb250aW51YXRpb24pCiAgICAgICAgIG1fY29u
dGludWF0aW9uLT5kZXN0cm95KCk7CiAgICAgbV9jb250aW51YXRpb24gPSAwOwotICAgIAorCiAg
ICAgLy8gTWFrZSBzdXJlIHRvIGRlc3Ryb3kgYW5vbnltb3VzIGNoaWxkcmVuIGZpcnN0IHdoaWxl
IHRoZXkgYXJlIHN0aWxsIGNvbm5lY3RlZCB0byB0aGUgcmVzdCBvZiB0aGUgdHJlZSwgc28gdGhh
dCB0aGV5IHdpbGwKICAgICAvLyBwcm9wZXJseSBkaXJ0eSBsaW5lIGJveGVzIHRoYXQgdGhleSBh
cmUgcmVtb3ZlZCBmcm9tLiAgRWZmZWN0cyB0aGF0IGRvIDpiZWZvcmUvOmFmdGVyIG9ubHkgb24g
aG92ZXIgY291bGQgY3Jhc2ggb3RoZXJ3aXNlLgogICAgIFJlbmRlckNvbnRhaW5lcjo6ZGVzdHJv
eUxlZnRvdmVyQ2hpbGRyZW4oKTsKLSAgICAKKwogICAgIGlmICghZG9jdW1lbnRCZWluZ0Rlc3Ry
b3llZCgpKSB7CiAgICAgICAgIGlmIChtX2ZpcnN0TGluZUJveCkgewogICAgICAgICAgICAgLy8g
V2UgY2FuJ3Qgd2FpdCBmb3IgUmVuZGVyQ29udGFpbmVyOjpkZXN0cm95IHRvIGNsZWFyIHRoZSBz
ZWxlY3Rpb24sCkBAIC0yMDgsMTMgKzIwMSwxMiBAQCB2b2lkIFJlbmRlckZsb3c6OmRlc3Ryb3ko
KQogICAgICAgICAgICAgLy8gY2hpbGRyZW4gd2lsbCBiZSBkZXN0cm95ZWQgYnkgdGhlIHRpbWUg
d2UgcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbi4KICAgICAgICAgICAgIGlmIChpc0Fub255bW91
c0Jsb2NrKCkpIHsKICAgICAgICAgICAgICAgICBmb3IgKElubGluZUZsb3dCb3gqIGJveCA9IG1f
Zmlyc3RMaW5lQm94OyBib3g7IGJveCA9IGJveC0+bmV4dEZsb3dCb3goKSkgewotICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoSW5saW5lQm94ICpjaGlsZEJveCA9IGJveC0+Zmlyc3RDaGlsZCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChJbmxpbmVCb3gqIGNoaWxkQm94ID0gYm94
LT5maXJzdENoaWxkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkQm94LT5yZW1v
dmUoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChpc0lubGluZSgpICYmIHBhcmVudCgp
KQorICAgICAgICB9IGVsc2UgaWYgKGlzSW5saW5lKCkgJiYgcGFyZW50KCkpCiAgICAgICAgICAg
ICBwYXJlbnQoKS0+ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQodGhpcyk7CiAgICAgfQogCkBA
IC0yNDAsMjMgKzIzMiwyMSBAQCB2b2lkIFJlbmRlckZsb3c6OmRpcnR5TGluZXNGcm9tQ2hhbmdl
ZENoCiAgICAgZm9yIChjdXJyID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpOyBjdXJyOyBjdXJy
ID0gY3Vyci0+cHJldmlvdXNTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGN1cnItPmlzRmxvYXRp
bmdPclBvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKKwogICAg
ICAgICBpZiAoY3Vyci0+aXNSZXBsYWNlZCgpKSB7CiAgICAgICAgICAgICBJbmxpbmVCb3gqIHdy
YXBwZXIgPSBjdXJyLT5pbmxpbmVCb3hXcmFwcGVyKCk7CiAgICAgICAgICAgICBpZiAod3JhcHBl
cikKICAgICAgICAgICAgICAgICBib3ggPSB3cmFwcGVyLT5yb290KCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZWxzZSBpZiAoY3Vyci0+aXNUZXh0KCkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChjdXJy
LT5pc1RleHQoKSkgewogICAgICAgICAgICAgSW5saW5lVGV4dEJveCogdGV4dEJveCA9IHN0YXRp
Y19jYXN0PFJlbmRlclRleHQqPihjdXJyKS0+bGFzdFRleHRCb3goKTsKICAgICAgICAgICAgIGlm
ICh0ZXh0Qm94KQogICAgICAgICAgICAgICAgIGJveCA9IHRleHRCb3gtPnJvb3QoKTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlIGlmIChjdXJyLT5pc0lubGluZUZsb3coKSkgeworICAgICAgICB9
IGVsc2UgaWYgKGN1cnItPmlzSW5saW5lRmxvdygpKSB7CiAgICAgICAgICAgICBJbmxpbmVSdW5C
b3gqIHJ1bkJveCA9IHN0YXRpY19jYXN0PFJlbmRlckZsb3cqPihjdXJyKS0+bGFzdExpbmVCb3go
KTsKICAgICAgICAgICAgIGlmIChydW5Cb3gpCiAgICAgICAgICAgICAgICAgYm94ID0gcnVuQm94
LT5yb290KCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKGJveCkKICAgICAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTI2Nyw3ICsyNTcsNyBAQCB2b2lkIFJlbmRlckZsb3c6
OmRpcnR5TGluZXNGcm9tQ2hhbmdlZENoCiAgICAgaWYgKGJveCkgewogICAgICAgICBSb290SW5s
aW5lQm94KiBhZGphY2VudEJveDsKICAgICAgICAgYm94LT5tYXJrRGlydHkoKTsKLSAgICAgICAg
CisKICAgICAgICAgLy8gZGlydHkgdGhlIGFkamFjZW50IGxpbmVzIHRoYXQgbWlnaHQgYmUgYWZm
ZWN0ZWQKICAgICAgICAgLy8gTk9URTogd2UgZGlydHkgdGhlIHByZXZpb3VzIGxpbmUgYmVjYXVz
ZSBSb290SW5saW5lQm94IG9iamVjdHMgY2FjaGUKICAgICAgICAgLy8gdGhlIGFkZHJlc3Mgb2Yg
dGhlIGZpcnN0IG9iamVjdCBvbiB0aGUgbmV4dCBsaW5lIGFmdGVyIGEgQlIsIHdoaWNoIHdlIG1h
eSBiZQpAQCAtMzEzLDcgKzMwMyw3IEBAIHZvaWQgUmVuZGVyRmxvdzo6ZGlydHlMaW5lQm94ZXMo
Ym9vbCBmdWwKIHsKICAgICBpZiAoIWlzUm9vdExpbmVCb3ggJiYgaXNSZXBsYWNlZCgpKQogICAg
ICAgICByZXR1cm4gUmVuZGVyQ29udGFpbmVyOjpkaXJ0eUxpbmVCb3hlcyhmdWxsTGF5b3V0LCBp
c1Jvb3RMaW5lQm94KTsKLSAgICAKKwogICAgIGlmIChmdWxsTGF5b3V0KQogICAgICAgICBkZWxl
dGVMaW5lQm94ZXMoKTsKICAgICBlbHNlIHsKQEAgLTMzMyw3ICszMjMsNyBAQCBJbmxpbmVCb3gq
IFJlbmRlckZsb3c6OmNyZWF0ZUlubGluZUJveChiCiAgICAgICAgIGZsb3dCb3ggPSBuZXcgKHJl
bmRlckFyZW5hKCkpIElubGluZUZsb3dCb3godGhpcyk7CiAgICAgZWxzZQogICAgICAgICBmbG93
Qm94ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSb290SW5saW5lQm94KHRoaXMpOwotICAgIAorCiAg
ICAgaWYgKCFtX2ZpcnN0TGluZUJveCkKICAgICAgICAgbV9maXJzdExpbmVCb3ggPSBtX2xhc3RM
aW5lQm94ID0gZmxvd0JveDsKICAgICBlbHNlIHsKQEAgLTM0NSwxNiArMzM1LDE1IEBAIElubGlu
ZUJveCogUmVuZGVyRmxvdzo6Y3JlYXRlSW5saW5lQm94KGIKICAgICByZXR1cm4gZmxvd0JveDsK
IH0KIAotdm9pZCBSZW5kZXJGbG93OjpwYWludExpbmVzKFBhaW50SW5mbyYgaSwgaW50IF90eCwg
aW50IF90eSkKK3ZvaWQgUmVuZGVyRmxvdzo6cGFpbnRMaW5lcyhQYWludEluZm8mIHBhaW50SW5m
bywgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgLy8gT25seSBwYWludCBkdXJpbmcgdGhlIGZvcmVn
cm91bmQvc2VsZWN0aW9uIHBoYXNlcy4KLSAgICBpZiAoaS5waGFzZSAhPSBQYWludFBoYXNlRm9y
ZWdyb3VuZCAmJiBpLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24gJiYgaS5waGFzZSAhPSBQ
YWludFBoYXNlT3V0bGluZSAKLSAgICAgICAgJiYgaS5waGFzZSAhPSBQYWludFBoYXNlU2VsZk91
dGxpbmUgJiYgaS5waGFzZSAhPSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lcykKKyAgICBpZiAocGFp
bnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kICYmIHBhaW50SW5mby5waGFzZSAh
PSBQYWludFBoYXNlU2VsZWN0aW9uICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlT3V0
bGluZSAKKyAgICAgICAgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxmT3V0bGlu
ZSAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUNoaWxkT3V0bGluZXMpCiAgICAgICAg
IHJldHVybjsKLSAgICAKKwogICAgIGJvb2wgaW5saW5lRmxvdyA9IGlzSW5saW5lRmxvdygpOwot
ICAgIGlmIChpbmxpbmVGbG93KQotICAgICAgICBBU1NFUlQobV9sYXllcik7IC8vIFRoZSBvbmx5
IHdheSBhIGNvbXBhY3QvcnVuLWluL2lubGluZSBjb3VsZCBwYWludCBsaWtlIHRoaXMgaXMgaWYg
aXQgaGFzIGEgbGF5ZXIuCisgICAgQVNTRVJUKGlubGluZUZsb3cgJiYgbV9sYXllcik7IC8vIFRo
ZSBvbmx5IHdheSBhIGNvbXBhY3QvcnVuLWluL2lubGluZSBjb3VsZCBwYWludCBsaWtlIHRoaXMg
aXMgaWYgaXQgaGFzIGEgbGF5ZXIuCiAKICAgICAvLyBJZiB3ZSBoYXZlIG5vIGxpbmVzIHRoZW4g
d2UgaGF2ZSBubyB3b3JrIHRvIGRvLgogICAgIGlmICghZmlyc3RMaW5lQm94KCkpCkBAIC0zNjQs
MTYgKzM1MywxNiBAQCB2b2lkIFJlbmRlckZsb3c6OnBhaW50TGluZXMoUGFpbnRJbmZvJiBpCiAg
ICAgLy8gaW50ZXJzZWN0LiAgVGhpcyBpcyBhIHF1aWNrIHNob3J0LWNpcmN1aXQgdGhhdCB3ZSBj
YW4gdGFrZSB0byBhdm9pZCB3YWxraW5nIGFueSBsaW5lcy4KICAgICAvLyBGSVhNRTogVGhpcyBj
aGVjayBpcyBmbGF3ZWQgaW4gdGhlIGZvbGxvd2luZyBleHRyZW1lbHkgb2JzY3VyZSB3YXk6CiAg
ICAgLy8gaWYgc29tZSBsaW5lIGluIHRoZSBtaWRkbGUgaGFzIGEgaHVnZSBvdmVyZmxvdywgaXQg
bWlnaHQgYWN0dWFsbHkgZXh0ZW5kIGJlbG93IHRoZSBsYXN0IGxpbmUuCi0gICAgaW50IHlQb3Mg
PSBmaXJzdExpbmVCb3goKS0+cm9vdCgpLT50b3BPdmVyZmxvdygpIC0gbWF4aW1hbE91dGxpbmVT
aXplKGkucGhhc2UpOwotICAgIGludCBoID0gbWF4aW1hbE91dGxpbmVTaXplKGkucGhhc2UpICsg
bGFzdExpbmVCb3goKS0+cm9vdCgpLT5ib3R0b21PdmVyZmxvdygpIC0geVBvczsKLSAgICB5UG9z
ICs9IF90eTsKLSAgICBpZiAoeVBvcyA+PSBpLnIuYm90dG9tKCkgfHwgeVBvcyArIGggPD0gaS5y
LnkoKSkKKyAgICBpbnQgeVBvcyA9IGZpcnN0TGluZUJveCgpLT5yb290KCktPnRvcE92ZXJmbG93
KCkgLSBtYXhpbWFsT3V0bGluZVNpemUocGFpbnRJbmZvLnBoYXNlKTsKKyAgICBpbnQgaCA9IG1h
eGltYWxPdXRsaW5lU2l6ZShwYWludEluZm8ucGhhc2UpICsgbGFzdExpbmVCb3goKS0+cm9vdCgp
LT5ib3R0b21PdmVyZmxvdygpIC0geVBvczsKKyAgICB5UG9zICs9IHR5OworICAgIGlmICh5UG9z
ID49IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpIHx8IHlQb3MgKyBoIDw9IHBhaW50SW5mby5yZWN0
LnkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUGFpbnRJbmZvIGluZm8oaSk7CisgICAgUGFp
bnRJbmZvIGluZm8ocGFpbnRJbmZvKTsKICAgICBSZW5kZXJGbG93U2VxdWVuY2VkU2V0IG91dGxp
bmVPYmplY3RzOwogICAgIGluZm8ub3V0bGluZU9iamVjdHMgPSAmb3V0bGluZU9iamVjdHM7Ci0g
ICAgCisKICAgICAvLyBTZWUgaWYgb3VyIHJvb3QgbGluZXMgaW50ZXJzZWN0IHdpdGggdGhlIGRp
cnR5IHJlY3QuICBJZiBzbywgdGhlbiB3ZSBwYWludAogICAgIC8vIHRoZW0uICBOb3RlIHRoYXQg
Ym94ZXMgY2FuIGVhc2lseSBvdmVybGFwLCBzbyB3ZSBjYW4ndCBtYWtlIGFueSBhc3N1bXB0aW9u
cwogICAgIC8vIGJhc2VkIG9mZiBwb3NpdGlvbnMgb2Ygb3VyIGZpcnN0IGxpbmUgYm94IG9yIG91
ciBsYXN0IGxpbmUgYm94LgpAQCAtMzg3LDExICszNzYsMTEgQEAgdm9pZCBSZW5kZXJGbG93Ojpw
YWludExpbmVzKFBhaW50SW5mbyYgaQogICAgICAgICAgICAgLy8gVHJ5IHRvIGF2b2lkIHNwbGl0
dGluZyBhIGxpbmUgdmVydGljYWxseSwgYnV0IG9ubHkgaWYgaXQncyBsZXNzIHRoYW4gdGhlIGhl
aWdodAogICAgICAgICAgICAgLy8gb2YgdGhlIGVudGlyZSBwYWdlLgogICAgICAgICAgICAgaWYg
KGN1cnItPnJvb3QoKS0+Ym90dG9tT3ZlcmZsb3coKSAtIGN1cnItPnJvb3QoKS0+dG9wT3ZlcmZs
b3coKSA8PSBjLT5wcmludFJlY3QoKS5oZWlnaHQoKSkgewotICAgICAgICAgICAgICAgIGlmIChf
dHkgKyBjdXJyLT5yb290KCktPmJvdHRvbU92ZXJmbG93KCkgPiBjLT5wcmludFJlY3QoKS5ib3R0
b20oKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoX3R5ICsgY3Vyci0+cm9vdCgpLT50b3BP
dmVyZmxvdygpIDwgYy0+dHJ1bmNhdGVkQXQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGMt
PnNldEJlc3RUcnVuY2F0ZWRBdChfdHkgKyBjdXJyLT5yb290KCktPnRvcE92ZXJmbG93KCksIHRo
aXMpOworICAgICAgICAgICAgICAgIGlmICh0eSArIGN1cnItPnJvb3QoKS0+Ym90dG9tT3ZlcmZs
b3coKSA+IGMtPnByaW50UmVjdCgpLmJvdHRvbSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICh0eSArIGN1cnItPnJvb3QoKS0+dG9wT3ZlcmZsb3coKSA8IGMtPnRydW5jYXRlZEF0KCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBjLT5zZXRCZXN0VHJ1bmNhdGVkQXQodHkgKyBjdXJyLT5y
b290KCktPnRvcE92ZXJmbG93KCksIHRoaXMpOwogICAgICAgICAgICAgICAgICAgICAvLyBJZiB3
ZSB3ZXJlIGFibGUgdG8gdHJ1bmNhdGUsIGRvbid0IHBhaW50LgotICAgICAgICAgICAgICAgICAg
ICBpZiAoX3R5ICsgY3Vyci0+cm9vdCgpLT50b3BPdmVyZmxvdygpID49IGMtPnRydW5jYXRlZEF0
KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh0eSArIGN1cnItPnJvb3QoKS0+dG9wT3ZlcmZs
b3coKSA+PSBjLT50cnVuY2F0ZWRBdCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNDAwLDE2ICszODksMTYgQEAg
dm9pZCBSZW5kZXJGbG93OjpwYWludExpbmVzKFBhaW50SW5mbyYgaQogICAgICAgICBpbnQgdG9w
ID0gbWluKGN1cnItPnJvb3QoKS0+dG9wT3ZlcmZsb3coKSwgY3Vyci0+cm9vdCgpLT5zZWxlY3Rp
b25Ub3AoKSkgLSBtYXhpbWFsT3V0bGluZVNpemUoaW5mby5waGFzZSk7CiAgICAgICAgIGludCBi
b3R0b20gPSBjdXJyLT5yb290KCktPmJvdHRvbU92ZXJmbG93KCkgKyBtYXhpbWFsT3V0bGluZVNp
emUoaW5mby5waGFzZSk7CiAgICAgICAgIGggPSBib3R0b20gLSB0b3A7Ci0gICAgICAgIHlQb3Mg
PSBfdHkgKyB0b3A7Ci0gICAgICAgIGlmICh5UG9zIDwgaW5mby5yLmJvdHRvbSgpICYmIHlQb3Mg
KyBoID4gaW5mby5yLnkoKSkKLSAgICAgICAgICAgIGN1cnItPnBhaW50KGluZm8sIF90eCwgX3R5
KTsKKyAgICAgICAgeVBvcyA9IHR5ICsgdG9wOworICAgICAgICBpZiAoeVBvcyA8IGluZm8ucmVj
dC5ib3R0b20oKSAmJiB5UG9zICsgaCA+IGluZm8ucmVjdC55KCkpCisgICAgICAgICAgICBjdXJy
LT5wYWludChpbmZvLCB0eCwgdHkpOwogICAgIH0KIAogICAgIGlmIChpbmZvLnBoYXNlID09IFBh
aW50UGhhc2VPdXRsaW5lIHx8IGluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lIHx8
IGluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkT3V0bGluZXMpIHsKICAgICAgICAgUmVuZGVy
Rmxvd1NlcXVlbmNlZFNldDo6aXRlcmF0b3IgZW5kID0gaW5mby5vdXRsaW5lT2JqZWN0cy0+ZW5k
KCk7CiAgICAgICAgIGZvciAoUmVuZGVyRmxvd1NlcXVlbmNlZFNldDo6aXRlcmF0b3IgaXQgPSBp
bmZvLm91dGxpbmVPYmplY3RzLT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAg
ICAgIFJlbmRlckZsb3cqIGZsb3cgPSAqaXQ7Ci0gICAgICAgICAgICBmbG93LT5wYWludE91dGxp
bmUoaW5mby5wLCBfdHgsIF90eSk7CisgICAgICAgICAgICBmbG93LT5wYWludE91dGxpbmUoaW5m
by5jb250ZXh0LCB0eCwgdHkpOwogICAgICAgICB9CiAgICAgICAgIGluZm8ub3V0bGluZU9iamVj
dHMtPmNsZWFyKCk7CiAgICAgfQpAQCAtNDIxLDggKzQxMCw3IEBAIGJvb2wgUmVuZGVyRmxvdzo6
aGl0VGVzdExpbmVzKEhpdFRlc3RSZXMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYm9v
bCBpbmxpbmVGbG93ID0gaXNJbmxpbmVGbG93KCk7Ci0gICAgaWYgKGlubGluZUZsb3cpCi0gICAg
ICAgIEFTU0VSVChtX2xheWVyKTsgLy8gVGhlIG9ubHkgd2F5IGEgY29tcGFjdC9ydW4taW4vaW5s
aW5lIGNvdWxkIHBhaW50IGxpa2UgdGhpcyBpcyBpZiBpdCBoYXMgYSBsYXllci4KKyAgICBBU1NF
UlQoaW5saW5lRmxvdyAmJiBtX2xheWVyKTsgLy8gVGhlIG9ubHkgd2F5IGEgY29tcGFjdC9ydW4t
aW4vaW5saW5lIGNvdWxkIHBhaW50IGxpa2UgdGhpcyBpcyBpZiBpdCBoYXMgYSBsYXllci4KIAog
ICAgIC8vIElmIHdlIGhhdmUgbm8gbGluZXMgdGhlbiB3ZSBoYXZlIG5vIHdvcmsgdG8gZG8uCiAg
ICAgaWYgKCFmaXJzdExpbmVCb3goKSkKQEAgLTQ1Nyw5ICs0NDUsMTAgQEAgSW50UmVjdCBSZW5k
ZXJGbG93OjpnZXRBYnNvbHV0ZVJlcGFpbnRSZQogICAgICAgICAvLyBGaW5kIG91ciBsZWZ0bW9z
dCBwb3NpdGlvbi4KICAgICAgICAgaW50IGxlZnQgPSAwOwogICAgICAgICBpbnQgdG9wID0gZmly
c3RMaW5lQm94KCkgPyBmaXJzdExpbmVCb3goKS0+eVBvcygpIDogMDsKLSAgICAgICAgZm9yIChJ
bmxpbmVSdW5Cb3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5l
eHRMaW5lQm94KCkpCisgICAgICAgIGZvciAoSW5saW5lUnVuQm94KiBjdXJyID0gZmlyc3RMaW5l
Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKSB7CiAgICAgICAgICAgICBp
ZiAoY3VyciA9PSBmaXJzdExpbmVCb3goKSB8fCBjdXJyLT54UG9zKCkgPCBsZWZ0KQogICAgICAg
ICAgICAgICAgIGxlZnQgPSBjdXJyLT54UG9zKCk7CisgICAgICAgIH0KIAogICAgICAgICAvLyBO
b3cgaW52YWxpZGF0ZSBhIHJlY3RhbmdsZS4KICAgICAgICAgaW50IG93ID0gc3R5bGUoKSA/IHN0
eWxlKCktPm91dGxpbmVTaXplKCkgOiAwOwpAQCAtNDc1LDcgKzQ2NCw3IEBAIEludFJlY3QgUmVu
ZGVyRmxvdzo6Z2V0QWJzb2x1dGVSZXBhaW50UmUKICAgICAgICAgICAgICAgICBpbmxpbmVGbG93
LT5sYXllcigpLT5yZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0KGxlZnQsIHRvcCk7CiAgICAgICAgIH0K
IAotICAgICAgICBJbnRSZWN0IHIoLW93K2xlZnQsIC1vdyt0b3AsIHdpZHRoKCkrb3cqMiwgaGVp
Z2h0KCkrb3cqMik7CisgICAgICAgIEludFJlY3Qgcigtb3cgKyBsZWZ0LCAtb3cgKyB0b3AsIHdp
ZHRoKCkgKyBvdyAqIDIsIGhlaWdodCgpICsgb3cgKiAyKTsKICAgICAgICAgaWYgKGNiLT5oYXNP
dmVyZmxvd0NsaXAoKSkgewogICAgICAgICAgICAgLy8gY2ItPmhlaWdodCgpIGlzIGluYWNjdXJh
dGUgaWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIGxheW91dCBvZiB8Y2J8LCBzbyB1c2UgdGhl
CiAgICAgICAgICAgICAvLyBsYXllcidzIHNpemUgaW5zdGVhZC4gIEV2ZW4gaWYgdGhlIGxheWVy
J3Mgc2l6ZSBpcyB3cm9uZywgdGhlIGxheWVyIGl0c2VsZiB3aWxsIHJlcGFpbnQKQEAgLTQ4OCw3
ICs0NzcsNyBAQCBJbnRSZWN0IFJlbmRlckZsb3c6OmdldEFic29sdXRlUmVwYWludFJlCiAgICAg
ICAgICAgICByID0gaW50ZXJzZWN0aW9uKHJlcGFpbnRSZWN0LCBib3hSZWN0KTsKICAgICAgICAg
fQogICAgICAgICBjYi0+Y29tcHV0ZUFic29sdXRlUmVwYWludFJlY3Qocik7Ci0gICAgICAgIAor
CiAgICAgICAgIGlmIChvdykgewogICAgICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIg
PSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKCFjdXJyLT5pc1RleHQoKSkgewpAQCAtNDk2LDIyICs0ODUsMjIgQEAg
SW50UmVjdCBSZW5kZXJGbG93OjpnZXRBYnNvbHV0ZVJlcGFpbnRSZQogICAgICAgICAgICAgICAg
ICAgICByLnVuaXRlKGNoaWxkUmVjdCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChjb250aW51YXRpb24oKSAmJiAhY29u
dGludWF0aW9uKCktPmlzSW5saW5lKCkpIHsKICAgICAgICAgICAgICAgICBJbnRSZWN0IGNvbnRS
ZWN0ID0gY29udGludWF0aW9uKCktPmdldEFic29sdXRlUmVwYWludFJlY3RXaXRoT3V0bGluZShv
dyk7CiAgICAgICAgICAgICAgICAgci51bml0ZShjb250UmVjdCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIHI7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIHJldHVybiBSZW5kZXJDb250YWluZXI6OmdldEFic29sdXRlUmVwYWludFJlY3QoKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gUmVuZGVyQ29udGFpbmVyOjpnZXRBYnNvbHV0ZVJlcGFpbnRSZWN0
KCk7CiB9CiAKLWludAotUmVuZGVyRmxvdzo6bG93ZXN0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3Zl
cmZsb3dJbnRlcmlvciwgYm9vbCBpbmNsdWRlU2VsZikgY29uc3QKK2ludCBSZW5kZXJGbG93Ojps
b3dlc3RQb3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBib29sIGluY2x1ZGVT
ZWxmKSBjb25zdAogewotICAgIGFzc2VydCghaXNJbmxpbmVGbG93KCkpOworICAgIEFTU0VSVCgh
aXNJbmxpbmVGbG93KCkpOwogICAgIGludCBib3R0b20gPSBpbmNsdWRlU2VsZiAmJiBtX3dpZHRo
ID4gMCA/IG1faGVpZ2h0IDogMDsKICAgICBpZiAoIWluY2x1ZGVPdmVyZmxvd0ludGVyaW9yICYm
IGhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gYm90dG9tOwpAQCAtNTIwLDIyICs1
MDksMjAgQEAgUmVuZGVyRmxvdzo6bG93ZXN0UG9zaXRpb24oYm9vbCBpbmNsdWRlTwogICAgIC8v
IEZvciBub3csIHdlIGhhdmUgdG8gZGVzY2VuZCBpbnRvIGFsbCB0aGUgY2hpbGRyZW4sIHNpbmNl
IHdlIG1heSBoYXZlIGEgaHVnZSBhYnMgZGl2IGluc2lkZQogICAgIC8vIGEgdGlueSByZWwgZGl2
IGJ1cmllZCBzb21ld2hlcmUgZGVlcCBpbiBvdXIgY2hpbGQgdHJlZS4gIEluIHRoaXMgY2FzZSB3
ZSBoYXZlIHRvIGdldCB0bwogICAgIC8vIHRoZSBhYnMgZGl2LgotICAgIGZvciAoUmVuZGVyT2Jq
ZWN0ICpjID0gZmlyc3RDaGlsZCgpOyBjOyBjID0gYy0+bmV4dFNpYmxpbmcoKSkgewotICAgICAg
ICBpZiAoIWMtPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSAmJiAhYy0+aXNUZXh0KCkgJiYgIWMt
PmlzSW5saW5lRmxvdygpKSB7Ci0gICAgICAgICAgICBpbnQgbHAgPSBjLT55UG9zKCkgKyBjLT5s
b3dlc3RQb3NpdGlvbihmYWxzZSk7Ci0gICAgICAgICAgICBib3R0b20gPSBtYXgoYm90dG9tLCBs
cCk7Ci0gICAgICAgIH0KKyAgICBmb3IgKFJlbmRlck9iamVjdCogYyA9IGZpcnN0Q2hpbGQoKTsg
YzsgYyA9IGMtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFjLT5pc0Zsb2F0aW5nT3JQ
b3NpdGlvbmVkKCkgJiYgIWMtPmlzVGV4dCgpICYmICFjLT5pc0lubGluZUZsb3coKSkKKyAgICAg
ICAgICAgIGJvdHRvbSA9IG1heChib3R0b20sIGMtPnlQb3MoKSArIGMtPmxvd2VzdFBvc2l0aW9u
KGZhbHNlKSk7CiAgICAgfQotIAorCiAgICAgaWYgKGlzUmVsUG9zaXRpb25lZCgpKQogICAgICAg
ICBib3R0b20gKz0gcmVsYXRpdmVQb3NpdGlvbk9mZnNldFkoKTsgICAgICAgICAKLSAgICAKKwog
ICAgIHJldHVybiBib3R0b207CiB9CiAKIGludCBSZW5kZXJGbG93OjpyaWdodG1vc3RQb3NpdGlv
bihib29sIGluY2x1ZGVPdmVyZmxvd0ludGVyaW9yLCBib29sIGluY2x1ZGVTZWxmKSBjb25zdAog
ewotICAgIGFzc2VydCghaXNJbmxpbmVGbG93KCkpOworICAgIEFTU0VSVCghaXNJbmxpbmVGbG93
KCkpOwogICAgIGludCByaWdodCA9IGluY2x1ZGVTZWxmICYmIG1faGVpZ2h0ID4gMCA/IG1fd2lk
dGggOiAwOwogICAgIGlmICghaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IgJiYgaGFzT3ZlcmZsb3dD
bGlwKCkpCiAgICAgICAgIHJldHVybiByaWdodDsKQEAgLTU0NCw0NCArNTMxLDQwIEBAIGludCBS
ZW5kZXJGbG93OjpyaWdodG1vc3RQb3NpdGlvbihib29sIGkKICAgICAvLyBGb3Igbm93LCB3ZSBo
YXZlIHRvIGRlc2NlbmQgaW50byBhbGwgdGhlIGNoaWxkcmVuLCBzaW5jZSB3ZSBtYXkgaGF2ZSBh
IGh1Z2UgYWJzIGRpdiBpbnNpZGUKICAgICAvLyBhIHRpbnkgcmVsIGRpdiBidXJpZWQgc29tZXdo
ZXJlIGRlZXAgaW4gb3VyIGNoaWxkIHRyZWUuICBJbiB0aGlzIGNhc2Ugd2UgaGF2ZSB0byBnZXQg
dG8KICAgICAvLyB0aGUgYWJzIGRpdi4KLSAgICBmb3IgKFJlbmRlck9iamVjdCAqYyA9IGZpcnN0
Q2hpbGQoKTsgYzsgYyA9IGMtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKCFjLT5pc0Zs
b2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYgIWMtPmlzVGV4dCgpICYmICFjLT5pc0lubGluZUZsb3co
KSkgewotICAgICAgICAgICAgaW50IHJwID0gYy0+eFBvcygpICsgYy0+cmlnaHRtb3N0UG9zaXRp
b24oZmFsc2UpOwotICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIHJwKTsKLSAgICAgICAg
fQorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjID0gZmlyc3RDaGlsZCgpOyBjOyBjID0gYy0+bmV4
dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoIWMtPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSAm
JiAhYy0+aXNUZXh0KCkgJiYgIWMtPmlzSW5saW5lRmxvdygpKQorICAgICAgICAgICAgcmlnaHQg
PSBtYXgocmlnaHQsIGMtPnhQb3MoKSArIGMtPnJpZ2h0bW9zdFBvc2l0aW9uKGZhbHNlKSk7CiAg
ICAgfQotICAgIAorCiAgICAgaWYgKGlzUmVsUG9zaXRpb25lZCgpKQogICAgICAgICByaWdodCAr
PSByZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WCgpOwotICAgIAorCiAgICAgcmV0dXJuIHJpZ2h0Owog
fQogCiBpbnQgUmVuZGVyRmxvdzo6bGVmdG1vc3RQb3NpdGlvbihib29sIGluY2x1ZGVPdmVyZmxv
d0ludGVyaW9yLCBib29sIGluY2x1ZGVTZWxmKSBjb25zdAogewotICAgIGFzc2VydCghaXNJbmxp
bmVGbG93KCkpOworICAgIEFTU0VSVCghaXNJbmxpbmVGbG93KCkpOwogICAgIGludCBsZWZ0ID0g
aW5jbHVkZVNlbGYgJiYgbV9oZWlnaHQgPiAwID8gMCA6IG1fd2lkdGg7CiAgICAgaWYgKCFpbmNs
dWRlT3ZlcmZsb3dJbnRlcmlvciAmJiBoYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgcmV0dXJu
IGxlZnQ7Ci0gICAgCisKICAgICAvLyBGSVhNRTogQ29tZSB1cCB3aXRoIGEgd2F5IHRvIHVzZSB0
aGUgbGF5ZXIgdHJlZSB0byBhdm9pZCB2aXNpdGluZyBhbGwgdGhlIGtpZHMuCiAgICAgLy8gRm9y
IG5vdywgd2UgaGF2ZSB0byBkZXNjZW5kIGludG8gYWxsIHRoZSBjaGlsZHJlbiwgc2luY2Ugd2Ug
bWF5IGhhdmUgYSBodWdlIGFicyBkaXYgaW5zaWRlCiAgICAgLy8gYSB0aW55IHJlbCBkaXYgYnVy
aWVkIHNvbWV3aGVyZSBkZWVwIGluIG91ciBjaGlsZCB0cmVlLiAgSW4gdGhpcyBjYXNlIHdlIGhh
dmUgdG8gZ2V0IHRvCiAgICAgLy8gdGhlIGFicyBkaXYuCi0gICAgZm9yIChSZW5kZXJPYmplY3Qg
KmMgPSBmaXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlm
ICghYy0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpICYmICFjLT5pc1RleHQoKSAmJiAhYy0+aXNJ
bmxpbmVGbG93KCkpIHsKLSAgICAgICAgICAgIGludCBscCA9IGMtPnhQb3MoKSArIGMtPmxlZnRt
b3N0UG9zaXRpb24oZmFsc2UpOwotICAgICAgICAgICAgbGVmdCA9IG1pbihsZWZ0LCBscCk7Ci0g
ICAgICAgIH0KKyAgICBmb3IgKFJlbmRlck9iamVjdCogYyA9IGZpcnN0Q2hpbGQoKTsgYzsgYyA9
IGMtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFjLT5pc0Zsb2F0aW5nT3JQb3NpdGlv
bmVkKCkgJiYgIWMtPmlzVGV4dCgpICYmICFjLT5pc0lubGluZUZsb3coKSkKKyAgICAgICAgICAg
IGxlZnQgPSBtaW4obGVmdCwgYy0+eFBvcygpICsgYy0+bGVmdG1vc3RQb3NpdGlvbihmYWxzZSkp
OwogICAgIH0KLSAgICAKKwogICAgIGlmIChpc1JlbFBvc2l0aW9uZWQoKSkKICAgICAgICAgbGVm
dCArPSByZWxhdGl2ZVBvc2l0aW9uT2Zmc2V0WCgpOyAKLSAgICAgICAgCisKICAgICByZXR1cm4g
bGVmdDsKIH0KIAotSW50UmVjdCBSZW5kZXJGbG93OjpjYXJldFJlY3QoaW50IG9mZnNldCwgRUFm
ZmluaXR5IGFmZmluaXR5LCBpbnQgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSkKK0ludFJlY3QgUmVu
ZGVyRmxvdzo6Y2FyZXRSZWN0KGludCBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSwgaW50KiBl
eHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7CiAgICAgLy8gRG8gdGhlIG5vcm1hbCBjYWxjdWxhdGlv
biBpbiBtb3N0IGNhc2VzLgogICAgIGlmIChmaXJzdENoaWxkKCkgfHwgc3R5bGUoKS0+ZGlzcGxh
eSgpID09IElOTElORSkKQEAgLTU5NSw3ICs1NzgsNyBAQCBJbnRSZWN0IFJlbmRlckZsb3c6OmNh
cmV0UmVjdChpbnQgb2Zmc2V0CiAgICAgLy8gSG93ZXZlciwgYXMgc29vbiBhcyBzb21lIGNvbnRl
bnQgaXMgZW50ZXJlZCwgdGhlIGxpbmUgYm94ZXMgd2lsbCBiZQogICAgIC8vIGNvbnN0cnVjdGVk
IGFuZCB0aGlzIGtsdWRnZSBpcyBub3QgY2FsbGVkIGFueSBtb3JlLiBTbyBvbmx5IHRoZSBjYXJl
dCBzaXplCiAgICAgLy8gb2YgYW4gZW1wdHkgOmZpcnN0LWxpbmUnZCBibG9jayBpcyB3cm9uZy4g
SSB0aGluayB3ZSBjYW4gbGl2ZSB3aXRoIHRoYXQuCi0gICAgUmVuZGVyU3R5bGUgKmN1cnJlbnRT
dHlsZSA9IGZpcnN0TGluZVN0eWxlKCk7CisgICAgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSA9
IGZpcnN0TGluZVN0eWxlKCk7CiAgICAgaW50IGhlaWdodCA9IGxpbmVIZWlnaHQodHJ1ZSk7CiAg
ICAgY29uc3QgaW50IGNhcmV0V2lkdGggPSAxOwogCkBAIC02NDcsMTAgKzYzMCwxMCBAQCBJbnRS
ZWN0IFJlbmRlckZsb3c6OmNhcmV0UmVjdChpbnQgb2Zmc2V0CiAgICAgICAgICAgICBpbnQgbXlS
aWdodCA9IHggKyBjYXJldFdpZHRoOwogICAgICAgICAgICAgaW50IGlnbm9yZTsKICAgICAgICAg
ICAgIGFic29sdXRlUG9zaXRpb25Gb3JDb250ZW50KG15UmlnaHQsIGlnbm9yZSk7Ci0gICAgICAg
ICAgICAKKwogICAgICAgICAgICAgaW50IGNvbnRhaW5lclJpZ2h0ID0gY29udGFpbmluZ0Jsb2Nr
KCktPnhQb3MoKSArIGNvbnRhaW5pbmdCbG9ja1dpZHRoKCk7CiAgICAgICAgICAgICBhYnNvbHV0
ZVBvc2l0aW9uRm9yQ29udGVudChjb250YWluZXJSaWdodCwgaWdub3JlKTsKLSAgICAgICAgICAg
IAorCiAgICAgICAgICAgICAqZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gY29udGFpbmVyUmlnaHQg
LSBteVJpZ2h0OwogICAgICAgICB9CiAgICAgfQpAQCAtNjYzLDI3ICs2NDYsMjcgQEAgSW50UmVj
dCBSZW5kZXJGbG93OjpjYXJldFJlY3QoaW50IG9mZnNldAogICAgIHJldHVybiBJbnRSZWN0KHgs
IHksIGNhcmV0V2lkdGgsIGhlaWdodCk7CiB9CiAKLXZvaWQgUmVuZGVyRmxvdzo6YWRkRm9jdXNS
aW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiBwLCBpbnQgX3R4LCBpbnQgX3R5KQordm9pZCBSZW5k
ZXJGbG93OjphZGRGb2N1c1JpbmdSZWN0cyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCwgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgaWYgKGlzUmVuZGVyQmxvY2soKSkKLSAgICAgICBw
LT5hZGRGb2N1c1JpbmdSZWN0KEludFJlY3QoX3R4LCBfdHksIHdpZHRoKCksIGhlaWdodCgpKSk7
CisgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRGb2N1c1JpbmdSZWN0KEludFJlY3QodHgsIHR5
LCB3aWR0aCgpLCBoZWlnaHQoKSkpOwogCiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSkgewog
ICAgICAgICBmb3IgKElubGluZVJ1bkJveCogY3VyciA9IGZpcnN0TGluZUJveCgpOyBjdXJyOyBj
dXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkKLSAgICAgICAgICAgIHAtPmFkZEZvY3VzUmluZ1Jl
Y3QoSW50UmVjdChfdHggKyBjdXJyLT54UG9zKCksIF90eSArIGN1cnItPnlQb3MoKSwgY3Vyci0+
d2lkdGgoKSwgY3Vyci0+aGVpZ2h0KCkpKTsKLSAgICAgICAgCisgICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPmFkZEZvY3VzUmluZ1JlY3QoSW50UmVjdCh0eCArIGN1cnItPnhQb3MoKSwgdHkg
KyBjdXJyLT55UG9zKCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKSk7CisKICAgICAg
ICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBj
dXJyLT5uZXh0U2libGluZygpKQogICAgICAgICAgICAgaWYgKCFjdXJyLT5pc1RleHQoKSAmJiAh
Y3Vyci0+aXNMaXN0TWFya2VyKCkpCi0gICAgICAgICAgICAgICAgY3Vyci0+YWRkRm9jdXNSaW5n
UmVjdHMocCwgX3R4ICsgY3Vyci0+eFBvcygpLCBfdHkgKyBjdXJyLT55UG9zKCkpOworICAgICAg
ICAgICAgICAgIGN1cnItPmFkZEZvY3VzUmluZ1JlY3RzKGdyYXBoaWNzQ29udGV4dCwgdHggKyBj
dXJyLT54UG9zKCksIHR5ICsgY3Vyci0+eVBvcygpKTsKICAgICB9Ci0gICAgICAgIAorCiAgICAg
aWYgKGNvbnRpbnVhdGlvbigpKQotICAgICAgICBjb250aW51YXRpb24oKS0+YWRkRm9jdXNSaW5n
UmVjdHMocCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdHgg
LSBjb250YWluaW5nQmxvY2soKS0+eFBvcygpICsgY29udGludWF0aW9uKCktPnhQb3MoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90eSAtIGNvbnRhaW5pbmdC
bG9jaygpLT55UG9zKCkgKyBjb250aW51YXRpb24oKS0+eVBvcygpKTsKKyAgICAgICAgY29udGlu
dWF0aW9uKCktPmFkZEZvY3VzUmluZ1JlY3RzKGdyYXBoaWNzQ29udGV4dCwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eCAtIGNvbnRhaW5pbmdCbG9jaygpLT54
UG9zKCkgKyBjb250aW51YXRpb24oKS0+eFBvcygpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHkgLSBjb250YWluaW5nQmxvY2soKS0+eVBvcygpICsgY29udGlu
dWF0aW9uKCktPnlQb3MoKSk7CiB9CiAKLXZvaWQgUmVuZGVyRmxvdzo6cGFpbnRPdXRsaW5lKEdy
YXBoaWNzQ29udGV4dCogcCwgaW50IF90eCwgaW50IF90eSkKK3ZvaWQgUmVuZGVyRmxvdzo6cGFp
bnRPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQgdHgsIGludCB0
eSkKIHsKICAgICBpZiAoIWhhc091dGxpbmUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjkzLDIw
ICs2NzYsMjAgQEAgdm9pZCBSZW5kZXJGbG93OjpwYWludE91dGxpbmUoR3JhcGhpY3NDbwogICAg
ICAgICBDb2xvciBvYyA9IHN0eWxlKCktPm91dGxpbmVDb2xvcigpOwogICAgICAgICBpZiAoIW9j
LmlzVmFsaWQoKSkKICAgICAgICAgICAgIG9jID0gc3R5bGUoKS0+Y29sb3IoKTsKLSAgICAgICAg
Ci0gICAgICAgIHAtPmluaXRGb2N1c1Jpbmcob3csIHN0eWxlKCktPm91dGxpbmVPZmZzZXQoKSk7
Ci0gICAgICAgIGFkZEZvY3VzUmluZ1JlY3RzKHAsIF90eCwgX3R5KTsKKworICAgICAgICBncmFw
aGljc0NvbnRleHQtPmluaXRGb2N1c1Jpbmcob3csIHN0eWxlKCktPm91dGxpbmVPZmZzZXQoKSk7
CisgICAgICAgIGFkZEZvY3VzUmluZ1JlY3RzKGdyYXBoaWNzQ29udGV4dCwgdHgsIHR5KTsKICAg
ICAgICAgaWYgKHN0eWxlKCktPm91dGxpbmVTdHlsZUlzQXV0bygpKQotICAgICAgICAgICAgcC0+
ZHJhd0ZvY3VzUmluZyhvYyk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdGb2N1
c1Jpbmcob2MpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBhZGRQREZVUkxSZWN0KHAsIHAt
PmZvY3VzUmluZ0JvdW5kaW5nUmVjdCgpKTsKLSAgICAgICAgcC0+Y2xlYXJGb2N1c1JpbmcoKTsK
KyAgICAgICAgICAgIGFkZFBERlVSTFJlY3QoZ3JhcGhpY3NDb250ZXh0LCBncmFwaGljc0NvbnRl
eHQtPmZvY3VzUmluZ0JvdW5kaW5nUmVjdCgpKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5j
bGVhckZvY3VzUmluZygpOwogICAgIH0KIAogICAgIGlmIChzdHlsZSgpLT5vdXRsaW5lU3R5bGVJ
c0F1dG8oKSB8fCBzdHlsZSgpLT5vdXRsaW5lU3R5bGUoKSA8PSBCSElEREVOKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBEZXByZWNhdGVkUHRyTGlzdCA8SW50UmVjdD4gcmVjdHM7CisgICAgRGVw
cmVjYXRlZFB0ckxpc3Q8SW50UmVjdD4gcmVjdHM7CiAgICAgcmVjdHMuc2V0QXV0b0RlbGV0ZSh0
cnVlKTsKIAogICAgIHJlY3RzLmFwcGVuZChuZXcgSW50UmVjdCk7CkBAIC03MTYsMjYgKzY5OSwy
NyBAQCB2b2lkIFJlbmRlckZsb3c6OnBhaW50T3V0bGluZShHcmFwaGljc0NvCiAgICAgcmVjdHMu
YXBwZW5kKG5ldyBJbnRSZWN0KTsKIAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwg
cmVjdHMuY291bnQoKSAtIDE7IGkrKykKLSAgICAgICAgcGFpbnRPdXRsaW5lRm9yTGluZShwLCBf
dHgsIF90eSwgKnJlY3RzLmF0KGktMSksICpyZWN0cy5hdChpKSwgKnJlY3RzLmF0KGkrMSkpOwor
ICAgICAgICBwYWludE91dGxpbmVGb3JMaW5lKGdyYXBoaWNzQ29udGV4dCwgdHgsIHR5LCAqcmVj
dHMuYXQoaSAtIDEpLCAqcmVjdHMuYXQoaSksICpyZWN0cy5hdChpICsgMSkpOwogfQogCi12b2lk
IFJlbmRlckZsb3c6OnBhaW50T3V0bGluZUZvckxpbmUoR3JhcGhpY3NDb250ZXh0KiBwLCBpbnQg
dHgsIGludCB0eSwgY29uc3QgSW50UmVjdCAmbGFzdGxpbmUsIGNvbnN0IEludFJlY3QgJnRoaXNs
aW5lLCBjb25zdCBJbnRSZWN0ICZuZXh0bGluZSkKK3ZvaWQgUmVuZGVyRmxvdzo6cGFpbnRPdXRs
aW5lRm9yTGluZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHR4LCBpbnQg
dHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYg
bGFzdGxpbmUsIGNvbnN0IEludFJlY3QmIHRoaXNsaW5lLCBjb25zdCBJbnRSZWN0JiBuZXh0bGlu
ZSkKIHsKICAgICBpbnQgb3cgPSBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKTsKICAgICBFQm9yZGVy
U3R5bGUgb3MgPSBzdHlsZSgpLT5vdXRsaW5lU3R5bGUoKTsKICAgICBDb2xvciBvYyA9IHN0eWxl
KCktPm91dGxpbmVDb2xvcigpOwogICAgIGlmICghb2MuaXNWYWxpZCgpKQogICAgICAgICBvYyA9
IHN0eWxlKCktPmNvbG9yKCk7Ci0gICAgCisKICAgICBpbnQgb2Zmc2V0ID0gc3R5bGUoKS0+b3V0
bGluZU9mZnNldCgpOwotICAgIAorCiAgICAgaW50IHQgPSB0eSArIHRoaXNsaW5lLnkoKSAtIG9m
ZnNldDsKICAgICBpbnQgbCA9IHR4ICsgdGhpc2xpbmUueCgpIC0gb2Zmc2V0OwogICAgIGludCBi
ID0gdHkgKyB0aGlzbGluZS5ib3R0b20oKSArIG9mZnNldDsKICAgICBpbnQgciA9IHR4ICsgdGhp
c2xpbmUucmlnaHQoKSArIG9mZnNldDsKICAgICAKICAgICAvLyBsZWZ0IGVkZ2UKLSAgICBkcmF3
Qm9yZGVyKHAsCisgICAgZHJhd0JvcmRlcihncmFwaGljc0NvbnRleHQsCiAgICAgICAgICAgICAg
ICBsIC0gb3csCiAgICAgICAgICAgICAgICB0IC0gKGxhc3RsaW5lLmlzRW1wdHkoKSB8fCB0aGlz
bGluZS54KCkgPCBsYXN0bGluZS54KCkgfHwgKGxhc3RsaW5lLnJpZ2h0KCkgLSAxKSA8PSB0aGlz
bGluZS54KCkgPyBvdyA6IDApLAogICAgICAgICAgICAgICAgbCwKQEAgLTc0Niw3ICs3MzAsNyBA
QCB2b2lkIFJlbmRlckZsb3c6OnBhaW50T3V0bGluZUZvckxpbmUoR3JhCiAgICAgICAgICAgICAg
ICAobmV4dGxpbmUuaXNFbXB0eSgpIHx8IHRoaXNsaW5lLngoKSA8PSBuZXh0bGluZS54KCkgfHwg
KG5leHRsaW5lLnJpZ2h0KCkgLSAxKSA8PSB0aGlzbGluZS54KCkgPyBvdyA6IC1vdykpOwogICAg
IAogICAgIC8vIHJpZ2h0IGVkZ2UKLSAgICBkcmF3Qm9yZGVyKHAsCisgICAgZHJhd0JvcmRlcihn
cmFwaGljc0NvbnRleHQsCiAgICAgICAgICAgICAgICByLAogICAgICAgICAgICAgICAgdCAtIChs
YXN0bGluZS5pc0VtcHR5KCkgfHwgbGFzdGxpbmUucmlnaHQoKSA8IHRoaXNsaW5lLnJpZ2h0KCkg
fHwgKHRoaXNsaW5lLnJpZ2h0KCkgLSAxKSA8PSBsYXN0bGluZS54KCkgPyBvdyA6IDApLAogICAg
ICAgICAgICAgICAgciArIG93LApAQCAtNzU3LDcgKzc0MSw3IEBAIHZvaWQgUmVuZGVyRmxvdzo6
cGFpbnRPdXRsaW5lRm9yTGluZShHcmEKICAgICAgICAgICAgICAgIChuZXh0bGluZS5pc0VtcHR5
KCkgfHwgbmV4dGxpbmUucmlnaHQoKSA8PSB0aGlzbGluZS5yaWdodCgpIHx8ICh0aGlzbGluZS5y
aWdodCgpIC0gMSkgPD0gbmV4dGxpbmUueCgpID8gb3cgOiAtb3cpKTsKICAgICAvLyB1cHBlciBl
ZGdlCiAgICAgaWYgKHRoaXNsaW5lLngoKSA8IGxhc3RsaW5lLngoKSkKLSAgICAgICAgZHJhd0Jv
cmRlcihwLAorICAgICAgICBkcmF3Qm9yZGVyKGdyYXBoaWNzQ29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICBsIC0gb3csCiAgICAgICAgICAgICAgICAgICAgdCAtIG93LAogICAgICAgICAgICAg
ICAgICAgIG1pbihyK293LCAobGFzdGxpbmUuaXNFbXB0eSgpID8gMTAwMDAwMCA6IHR4ICsgbGFz
dGxpbmUueCgpKSksCkBAIC03NjcsNyArNzUxLDcgQEAgdm9pZCBSZW5kZXJGbG93OjpwYWludE91
dGxpbmVGb3JMaW5lKEdyYQogICAgICAgICAgICAgICAgICAgICghbGFzdGxpbmUuaXNFbXB0eSgp
ICYmIHR4ICsgbGFzdGxpbmUueCgpICsgMSA8IHIgKyBvdykgPyAtb3cgOiBvdyk7CiAgICAgCiAg
ICAgaWYgKGxhc3RsaW5lLnJpZ2h0KCkgPCB0aGlzbGluZS5yaWdodCgpKQotICAgICAgICBkcmF3
Qm9yZGVyKHAsCisgICAgICAgIGRyYXdCb3JkZXIoZ3JhcGhpY3NDb250ZXh0LAogICAgICAgICAg
ICAgICAgICAgIG1heChsYXN0bGluZS5pc0VtcHR5KCkgPyAtMTAwMDAwMCA6IHR4ICsgbGFzdGxp
bmUucmlnaHQoKSwgbCAtIG93KSwKICAgICAgICAgICAgICAgICAgICB0IC0gb3csCiAgICAgICAg
ICAgICAgICAgICAgciArIG93LApAQCAtNzc4LDcgKzc2Miw3IEBAIHZvaWQgUmVuZGVyRmxvdzo6
cGFpbnRPdXRsaW5lRm9yTGluZShHcmEKICAgICAKICAgICAvLyBsb3dlciBlZGdlCiAgICAgaWYg
KHRoaXNsaW5lLngoKSA8IG5leHRsaW5lLngoKSkKLSAgICAgICAgZHJhd0JvcmRlcihwLAorICAg
ICAgICBkcmF3Qm9yZGVyKGdyYXBoaWNzQ29udGV4dCwKICAgICAgICAgICAgICAgICAgICBsIC0g
b3csCiAgICAgICAgICAgICAgICAgICAgYiwKICAgICAgICAgICAgICAgICAgICBtaW4ociArIG93
LCAhbmV4dGxpbmUuaXNFbXB0eSgpID8gdHggKyBuZXh0bGluZS54KCkgKyAxIDogMTAwMDAwMCks
CkBAIC03ODgsNyArNzcyLDcgQEAgdm9pZCBSZW5kZXJGbG93OjpwYWludE91dGxpbmVGb3JMaW5l
KEdyYQogICAgICAgICAgICAgICAgICAgICghbmV4dGxpbmUuaXNFbXB0eSgpICYmIHR4ICsgbmV4
dGxpbmUueCgpICsgMSA8IHIgKyBvdykgPyAtb3cgOiBvdyk7CiAgICAgCiAgICAgaWYgKG5leHRs
aW5lLnJpZ2h0KCkgPCB0aGlzbGluZS5yaWdodCgpKQotICAgICAgICBkcmF3Qm9yZGVyKHAsCisg
ICAgICAgIGRyYXdCb3JkZXIoZ3JhcGhpY3NDb250ZXh0LAogICAgICAgICAgICAgICAgICAgIG1h
eCghbmV4dGxpbmUuaXNFbXB0eSgpID8gdHggKyBuZXh0bGluZS5yaWdodCgpIDogLTEwMDAwMDAs
IGwgLSBvdyksCiAgICAgICAgICAgICAgICAgICAgYiwKICAgICAgICAgICAgICAgICAgICByICsg
b3csCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAkocmV2
aXNpb24gMTc0NDgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBBZmZpbmVUcmFuc2Zvcm0gUmVuZGVy
Rm9yZWlnbk9iamVjdDo6dHJhCiAKIHZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6cGFpbnQoUGFp
bnRJbmZvJiBwYWludEluZm8sIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSkKIHsKLSAgICBpZiAo
cGFpbnRJbmZvLnAtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICBpZiAocGFpbnRJbmZvLmNvbnRl
eHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgS1JlbmRlcmlu
Z0RldmljZSogZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7CkBAIC01NCwzNyArNTQsMzcgQEAg
dm9pZCBSZW5kZXJGb3JlaWduT2JqZWN0OjpwYWludChQYWludEluZgogICAgIGJvb2wgc2hvdWxk
UG9wQ29udGV4dCA9IGZhbHNlOwogICAgIGlmICghY29udGV4dCkgewogICAgICAgICAvLyBPbmx5
IG5lZWQgdG8gc2V0dXAgZm9yIEtDYW52YXMgcmVuZGVyaW5nIGlmIGl0IGhhc24ndCBhbHJlYWR5
IGJlZW4gZG9uZS4KLSAgICAgICAgY29udGV4dCA9IHBhaW50SW5mby5wLT5jcmVhdGVSZW5kZXJp
bmdEZXZpY2VDb250ZXh0KCk7CisgICAgICAgIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dC0+
Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgpOwogICAgICAgICBkZXZpY2UtPnB1c2hDb250
ZXh0KGNvbnRleHQpOwogICAgICAgICBzaG91bGRQb3BDb250ZXh0ID0gdHJ1ZTsKICAgICB9CiAK
LSAgICBwYWludEluZm8ucC0+c2F2ZSgpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7
CiAKICAgICBjb250ZXh0LT5jb25jYXRDVE0oQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKHBh
cmVudFgsIHBhcmVudFkpKTsKICAgICBjb250ZXh0LT5jb25jYXRDVE0obG9jYWxUcmFuc2Zvcm0o
KSk7CiAgICAgY29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcygpKTsK
IAotICAgIHBhaW50SW5mby5wLT5jbGlwKGdldENsaXBSZWN0KHBhcmVudFgsIHBhcmVudFkpKTsK
KyAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChnZXRDbGlwUmVjdChwYXJlbnRYLCBwYXJlbnRZ
KSk7CiAKICAgICBmbG9hdCBvcGFjaXR5ID0gc3R5bGUoKS0+b3BhY2l0eSgpOwogICAgIGlmIChv
cGFjaXR5IDwgMS4wZikKICAgICAgICAgLy8gRklYTUU6IFBvc3NpYmxlIG9wdGltaXphdGlvbiBi
eSBjbGlwcGluZyB0byBiYm94IGhlcmUsIG9uY2UgcmVsYXRpdmVCQm94IGlzIGltcGxlbWVudGVk
ICYgY2xpcCwgbWFzayBhbmQgZmlsdGVyIHN1cHBvcnQgYWRkZWQuCi0gICAgICAgIHBhaW50SW5m
by5wLT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOworICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKIAogICAgIFBhaW50SW5m
byBwaShwYWludEluZm8pOwotICAgIHBpLnIgPSBhYnNvbHV0ZVRyYW5zZm9ybSgpLmludmVydCgp
Lm1hcFJlY3QocGFpbnRJbmZvLnIpOworICAgIHBpLnJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybSgp
LmludmVydCgpLm1hcFJlY3QocGFpbnRJbmZvLnJlY3QpOwogICAgIFJlbmRlckJsb2NrOjpwYWlu
dChwaSwgMCwgMCk7CiAKICAgICBpZiAob3BhY2l0eSA8IDEuMGYpCi0gICAgICAgIHBhaW50SW5m
by5wLT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+
ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKIAogICAgIGlmIChzaG91bGRQb3BDb250ZXh0KSB7CiAg
ICAgICAgIGRldmljZS0+cG9wQ29udGV4dCgpOwogICAgICAgICBkZWxldGUgY29udGV4dDsKICAg
ICB9CiAKLSAgICBwYWludEluZm8ucC0+cmVzdG9yZSgpOworICAgIHBhaW50SW5mby5jb250ZXh0
LT5yZXN0b3JlKCk7CiB9CiAKIHZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6Y29tcHV0ZUFic29s
dXRlUmVwYWludFJlY3QoSW50UmVjdCYgciwgYm9vbCBmKQpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySFRNTENhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySFRNTENhbnZhcy5jcHAJKHJldmlzaW9uIDE3NDQ4KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySFRNTENhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAg
dm9pZCBSZW5kZXJIVE1MQ2FudmFzOjpwYWludChQYWludEluZm8mIAogICAgICAgICBwYWludEJv
eERlY29yYXRpb25zKHBhaW50SW5mbywgeCwgeSk7CiAKICAgICBpZiAoKHBhaW50SW5mby5waGFz
ZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNl
bGZPdXRsaW5lKSAmJiBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAmJiBzdHlsZSgpLT52aXNpYmls
aXR5KCkgPT0gVklTSUJMRSkKLSAgICAgICAgcGFpbnRPdXRsaW5lKHBhaW50SW5mby5wLCB4LCB5
LCB3aWR0aCgpLCBoZWlnaHQoKSwgc3R5bGUoKSk7CisgICAgICAgIHBhaW50T3V0bGluZShwYWlu
dEluZm8uY29udGV4dCwgeCwgeSwgd2lkdGgoKSwgaGVpZ2h0KCksIHN0eWxlKCkpOwogCiAgICAg
aWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCAmJiBwYWludEluZm8u
cGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbikKICAgICAgICAgcmV0dXJuOwpAQCAtNjgsMTEg
KzY4LDExIEBAIHZvaWQgUmVuZGVySFRNTENhbnZhczo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICB9
CiAKICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aGFzVGFnTmFtZShjYW52YXNUYWcp
KQotICAgICAgICBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KGVsZW1lbnQoKSktPnBh
aW50KHBhaW50SW5mby5wLAorICAgICAgICBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+
KGVsZW1lbnQoKSktPnBhaW50KHBhaW50SW5mby5jb250ZXh0LAogICAgICAgICAgICAgSW50UmVj
dCh4ICsgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSwgeSArIGJvcmRlclRvcCgpICsgcGFk
ZGluZ1RvcCgpLCBjb250ZW50V2lkdGgoKSwgY29udGVudEhlaWdodCgpKSk7CiAKICAgICBpZiAo
ZHJhd1NlbGVjdGlvblRpbnQpCi0gICAgICAgIHBhaW50SW5mby5wLT5maWxsUmVjdChzZWxlY3Rp
b25SZWN0KCksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKKyAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPmZpbGxSZWN0KHNlbGVjdGlvblJlY3QoKSwgc2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yKCkpOwogfQogCiB2b2lkIFJlbmRlckhUTUxDYW52YXM6OmxheW91dCgpCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiAxNzQ0OCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDEwICsxODUsMTAgQEAg
dm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludAogICAgIGlmIChzaG91bGRQ
YWludEJhY2tncm91bmRPckJvcmRlcigpICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNl
T3V0bGluZSAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAKICAg
ICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIHR4LCB0eSk7CiAKLSAgICBHcmFw
aGljc0NvbnRleHQqIHAgPSBwYWludEluZm8ucDsKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQgPSBwYWludEluZm8uY29udGV4dDsKIAogICAgIGlmICgocGFpbnRJbmZvLnBoYXNlID09IFBh
aW50UGhhc2VPdXRsaW5lIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxp
bmUpICYmIHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9
PSBWSVNJQkxFKQotICAgICAgICBwYWludE91dGxpbmUocCwgdHgsIHR5LCB3aWR0aCgpLCBoZWln
aHQoKSwgc3R5bGUoKSk7CisgICAgICAgIHBhaW50T3V0bGluZShjb250ZXh0LCB0eCwgdHksIHdp
ZHRoKCksIGhlaWdodCgpLCBzdHlsZSgpKTsKIAogICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0g
UGFpbnRQaGFzZUZvcmVncm91bmQgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxl
Y3Rpb24pCiAgICAgICAgIHJldHVybjsKQEAgLTIyMCw5ICsyMjAsOSBAQCB2b2lkIFJlbmRlcklt
YWdlOjpwYWludChQYWludEluZm8mIHBhaW50CiAKICAgICAgICAgaWYgKGNXaWR0aCA+IDIgJiYg
Y0hlaWdodCA+IDIpIHsKICAgICAgICAgICAgIGlmICghZXJyb3JPY2N1cnJlZCgpKSB7Ci0gICAg
ICAgICAgICAgICAgcC0+c2V0UGVuKENvbG9yOjpsaWdodEdyYXkpOwotICAgICAgICAgICAgICAg
IHAtPnNldEZpbGxDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOwotICAgICAgICAgICAgICAgIHAt
PmRyYXdSZWN0KEludFJlY3QodHggKyBsZWZ0Qm9yZGVyICsgbGVmdFBhZCwgdHkgKyB0b3BCb3Jk
ZXIgKyB0b3BQYWQsIGNXaWR0aCwgY0hlaWdodCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQt
PnNldFBlbihDb2xvcjo6bGlnaHRHcmF5KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRG
aWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5k
cmF3UmVjdChJbnRSZWN0KHR4ICsgbGVmdEJvcmRlciArIGxlZnRQYWQsIHR5ICsgdG9wQm9yZGVy
ICsgdG9wUGFkLCBjV2lkdGgsIGNIZWlnaHQpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgYm9vbCBlcnJvclBpY3R1cmVEcmF3biA9IGZhbHNlOwpAQCAtMjQxLDM0ICsyNDEsMzQgQEAg
dm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludAogICAgICAgICAgICAgICAg
ICAgICBjZW50ZXJZID0gMDsKICAgICAgICAgICAgICAgICBpbWFnZVggPSBsZWZ0Qm9yZGVyICsg
bGVmdFBhZCArIGNlbnRlclg7CiAgICAgICAgICAgICAgICAgaW1hZ2VZID0gdG9wQm9yZGVyICsg
dG9wUGFkICsgY2VudGVyWTsKLSAgICAgICAgICAgICAgICBwLT5kcmF3SW1hZ2UoaW1hZ2UoKSwg
SW50UG9pbnQodHggKyBpbWFnZVgsIHR5ICsgaW1hZ2VZKSk7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZHJhd0ltYWdlKGltYWdlKCksIEludFBvaW50KHR4ICsgaW1hZ2VYLCB0eSArIGltYWdl
WSkpOwogICAgICAgICAgICAgICAgIGVycm9yUGljdHVyZURyYXduID0gdHJ1ZTsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgaWYgKCFtX2FsdFRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB0ZXh0ID0gbV9hbHRUZXh0LmRlcHJlY2F0ZWRTdHJp
bmcoKTsKICAgICAgICAgICAgICAgICB0ZXh0LnJlcGxhY2UoJ1xcJywgYmFja3NsYXNoQXNDdXJy
ZW5jeVN5bWJvbCgpKTsKLSAgICAgICAgICAgICAgICBwLT5zZXRGb250KHN0eWxlKCktPmZvbnQo
KSk7Ci0gICAgICAgICAgICAgICAgcC0+c2V0UGVuKHN0eWxlKCktPmNvbG9yKCkpOworICAgICAg
ICAgICAgICAgIGNvbnRleHQtPnNldEZvbnQoc3R5bGUoKS0+Zm9udCgpKTsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5zZXRQZW4oc3R5bGUoKS0+Y29sb3IoKSk7CiAgICAgICAgICAgICAgICAg
aW50IGF4ID0gdHggKyBsZWZ0Qm9yZGVyICsgbGVmdFBhZDsKICAgICAgICAgICAgICAgICBpbnQg
YXkgPSB0eSArIHRvcEJvcmRlciArIHRvcFBhZDsKICAgICAgICAgICAgICAgICBjb25zdCBGb250
JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOwogICAgICAgICAgICAgICAgIGludCBhc2NlbnQgPSBm
b250LmFzY2VudCgpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgLy8gT25s
eSBkcmF3IHRoZSBhbHQgdGV4dCBpZiBpdCdsbCBmaXQgd2l0aGluIHRoZSBjb250ZW50IGJveCwK
ICAgICAgICAgICAgICAgICAvLyBhbmQgb25seSBpZiBpdCBmaXRzIGFib3ZlIHRoZSBlcnJvciBp
bWFnZS4KICAgICAgICAgICAgICAgICBUZXh0UnVuIHRleHRSdW4ocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBVQ2hhcio+KHRleHQudW5pY29kZSgpKSwgdGV4dC5sZW5ndGgoKSk7CiAgICAgICAgICAg
ICAgICAgaW50IHRleHRXaWR0aCA9IGZvbnQud2lkdGgodGV4dFJ1bik7CiAgICAgICAgICAgICAg
ICAgaWYgKGVycm9yUGljdHVyZURyYXduKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh1c2Fi
bGVXaWR0aCA+PSB0ZXh0V2lkdGggJiYgZm9udC5oZWlnaHQoKSA8PSBpbWFnZVkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dCh0ZXh0UnVuLCBJbnRQb2ludChheCwgYXkgKyBh
c2NlbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KHRleHRS
dW4sIEludFBvaW50KGF4LCBheSArIGFzY2VudCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAodXNhYmxlV2lkdGggPj0gdGV4dFdpZHRoICYmIGNIZWlnaHQgPj0gZm9udC5oZWlnaHQoKSkK
LSAgICAgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQodGV4dFJ1biwgSW50UG9pbnQoYXgsIGF5
ICsgYXNjZW50KSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KHRleHRS
dW4sIEludFBvaW50KGF4LCBheSArIGFzY2VudCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfSBlbHNlIGlmIChtX2NhY2hlZEltYWdlKSB7CiAjaWYgUExBVEZPUk0oTUFDKQotICAg
ICAgICBpZiAoc3R5bGUoKS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0b20gJiYgIXBhaW50SW5mby5w
LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIGlmIChzdHlsZSgpLT5oaWdobGlnaHQoKSAh
PSBudWxsQXRvbSAmJiAhcGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgICAgIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KHR4IC0gbV94LCB0eSAtIG1feSwgc3R5bGUo
KS0+aGlnaGxpZ2h0KCksIHRydWUpOwogI2VuZGlmCiAKQEAgLTI3NiwxMCArMjc2LDEwIEBAIHZv
aWQgUmVuZGVySW1hZ2U6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKIAogICAgICAgICBIVE1MSW1h
Z2VFbGVtZW50KiBpbWFnZUVsdCA9IChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5oYXNUYWdOYW1l
KGltZ1RhZykpID8gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KGVsZW1lbnQoKSkgOiAw
OwogICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvciA9IGltYWdlRWx0
ID8gaW1hZ2VFbHQtPmNvbXBvc2l0ZU9wZXJhdG9yKCkgOiBDb21wb3NpdGVTb3VyY2VPdmVyOwot
ICAgICAgICBwLT5kcmF3SW1hZ2UoaW1hZ2UoKSwgcmVjdCwgY29tcG9zaXRlT3BlcmF0b3IpOwor
ICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UoKSwgcmVjdCwgY29tcG9zaXRlT3BlcmF0
b3IpOwogCiAgICAgICAgIGlmIChkcmF3U2VsZWN0aW9uVGludCkKLSAgICAgICAgICAgIHAtPmZp
bGxSZWN0KHNlbGVjdGlvblJlY3QoKSwgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOworICAg
ICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3Qoc2VsZWN0aW9uUmVjdCgpLCBzZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IoKSk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCShyZXZpc2lvbiAxNzQ0OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTM5Nyw4ICsxMzk3LDggQEAgUmVuZGVyTGF5ZXI6OnBhaW50
TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvbwogICAgICAgICBzZXRDbGlwKHAsIHBhaW50RGlydHlSZWN0
LCBkYW1hZ2VSZWN0KTsKIAogICAgICAgICAvLyBQYWludCB0aGUgYmFja2dyb3VuZC4KLSAgICAg
ICAgUmVuZGVyT2JqZWN0OjpQYWludEluZm8gaW5mbyhwLCBkYW1hZ2VSZWN0LCBQYWludFBoYXNl
QmxvY2tCYWNrZ3JvdW5kLCBmYWxzZSwgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIDApOwotICAg
ICAgICByZW5kZXJlcigpLT5wYWludChpbmZvLCB0eCwgdHkpOworICAgICAgICBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyBwYWludEluZm8ocCwgZGFtYWdlUmVjdCwgUGFpbnRQaGFzZUJsb2NrQmFj
a2dyb3VuZCwgZmFsc2UsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCAwKTsKKyAgICAgICAgcmVu
ZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOwogCiAgICAgICAgIC8vIE91ciBzY3Jv
bGxiYXIgd2lkZ2V0cyBwYWludCBleGFjdGx5IHdoZW4gd2UgdGVsbCB0aGVtIHRvLCBzbyB0aGF0
IHRoZXkgd29yayBwcm9wZXJseSB3aXRoCiAgICAgICAgIC8vIHotaW5kZXguICBXZSBwYWludCBh
ZnRlciB3ZSBwYWludGVkIHRoZSBiYWNrZ3JvdW5kL2JvcmRlciwgc28gdGhhdCB0aGUgc2Nyb2xs
YmFycyB3aWxsCkBAIC0xNDIyLDE4ICsxNDIyLDE3IEBAIFJlbmRlckxheWVyOjpwYWludExheWVy
KFJlbmRlckxheWVyKiByb28KIAogICAgICAgICAvLyBTZXQgdXAgdGhlIGNsaXAgdXNlZCB3aGVu
IHBhaW50aW5nIG91ciBjaGlsZHJlbi4KICAgICAgICAgc2V0Q2xpcChwLCBwYWludERpcnR5UmVj
dCwgY2xpcFJlY3RUb0FwcGx5KTsKLSAgICAgICAgUmVuZGVyT2JqZWN0OjpQYWludEluZm8gaW5m
byhwLCBjbGlwUmVjdFRvQXBwbHksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdGlvbk9ubHkgPyBQYWludFBoYXNlU2VsZWN0aW9uIDogUGFpbnRQaGFzZUNoaWxk
QmxvY2tCYWNrZ3JvdW5kcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3JjZVdoaXRlVGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWlu
dGluZ1Jvb3RGb3JSZW5kZXJlciwgMCk7Ci0gICAgICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8s
IHR4LCB0eSk7CisgICAgICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIHBhaW50SW5mbyhwLCBj
bGlwUmVjdFRvQXBwbHksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZWN0aW9uT25seSA/IFBhaW50UGhhc2VTZWxlY3Rpb24gOiBQYWludFBoYXNlQ2hpbGRC
bG9ja0JhY2tncm91bmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yY2VXaGl0ZVRleHQsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCAwKTsKKyAgICAgICAg
cmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOwogICAgICAgICBpZiAoIXNlbGVj
dGlvbk9ubHkpIHsKLSAgICAgICAgICAgIGluZm8ucGhhc2UgPSBQYWludFBoYXNlRmxvYXQ7Ci0g
ICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChpbmZvLCB0eCwgdHkpOwotICAgICAgICAgICAg
aW5mby5waGFzZSA9IFBhaW50UGhhc2VGb3JlZ3JvdW5kOwotICAgICAgICAgICAgcmVuZGVyZXIo
KS0+cGFpbnQoaW5mbywgdHgsIHR5KTsKLSAgICAgICAgICAgIGluZm8ucGhhc2UgPSBQYWludFBo
YXNlQ2hpbGRPdXRsaW5lczsKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8sIHR4
LCB0eSk7CisgICAgICAgICAgICBwYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlRmxvYXQ7Cisg
ICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHR4LCB0eSk7CisgICAgICAg
ICAgICBwYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlRm9yZWdyb3VuZDsKKyAgICAgICAgICAg
IHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICAgICAgICAgIHBhaW50
SW5mby5waGFzZSA9IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzOworICAgICAgICAgICAgcmVuZGVy
ZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8g
Tm93IHJlc3RvcmUgb3VyIGNsaXAuCkBAIC0xNDQyLDkgKzE0NDEsOSBAQCBSZW5kZXJMYXllcjo6
cGFpbnRMYXllcihSZW5kZXJMYXllciogcm9vCiAgICAgCiAgICAgaWYgKCFvdXRsaW5lUmVjdC5p
c0VtcHR5KCkpIHsKICAgICAgICAgLy8gUGFpbnQgb3VyIG93biBvdXRsaW5lCi0gICAgICAgIFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvIGluZm8ocCwgb3V0bGluZVJlY3QsIFBhaW50UGhhc2VTZWxm
T3V0bGluZSwgZmFsc2UsIHBhaW50aW5nUm9vdEZvclJlbmRlcmVyLCAwKTsKKyAgICAgICAgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8gcGFpbnRJbmZvKHAsIG91dGxpbmVSZWN0LCBQYWludFBoYXNl
U2VsZk91dGxpbmUsIGZhbHNlLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwgMCk7CiAgICAgICAg
IHNldENsaXAocCwgcGFpbnREaXJ0eVJlY3QsIG91dGxpbmVSZWN0KTsKLSAgICAgICAgcmVuZGVy
ZXIoKS0+cGFpbnQoaW5mbywgdHgsIHR5KTsKKyAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFp
bnRJbmZvLCB0eCwgdHkpOwogICAgICAgICByZXN0b3JlQ2xpcChwLCBwYWludERpcnR5UmVjdCwg
b3V0bGluZVJlY3QpOwogICAgIH0KICAgICAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwCShyZXZpc2lvbiAxNzQ0OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNjQgKzIwNiw2NCBAQCBJbnRSZWN0IFJlbmRl
ckxpc3RCb3g6Oml0ZW1Cb3VuZGluZ0JveFJlCiAgICAgICAgICAgICAgICAgICAgc3R5bGUoKS0+
Zm9udCgpLmhlaWdodCgpICsgb3B0aW9uc1NwYWNpbmdNaWRkbGUpOwogfQogICAgIAotdm9pZCBS
ZW5kZXJMaXN0Qm94OjpwYWludE9iamVjdChQYWludEluZm8mIGksIGludCB0eCwgaW50IHR5KQor
dm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywgaW50
IHR4LCBpbnQgdHkpCiB7CiAgICAgLy8gUHVzaCBhIGNsaXAuCiAgICAgSW50UmVjdCBjbGlwUmVj
dCh0eCArIGJvcmRlckxlZnQoKSwgdHkgKyBib3JkZXJUb3AoKSwKICAgICAgICAgIHdpZHRoKCkg
LSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpLCBoZWlnaHQoKSAtIGJvcmRlckJvdHRvbSgp
IC0gYm9yZGVyVG9wKCkpOwotICAgIGlmIChpLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5k
IHx8IGkucGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kcykgeworICAgIGlm
IChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgcGFpbnRJbmZvLnBo
YXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHMpIHsKICAgICAgICAgaWYgKGNs
aXBSZWN0LndpZHRoKCkgPT0gMCB8fCBjbGlwUmVjdC5oZWlnaHQoKSA9PSAwKQogICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBpLnAtPnNhdmUoKTsKLSAgICAgICAgaS5wLT5jbGlwKGNsaXBS
ZWN0KTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmNsaXAoY2xpcFJlY3QpOwogICAgIH0KICAgICAKICAgICBIVE1MU2VsZWN0
RWxlbWVudCogc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkp
OwogICAgIGludCBsaXN0SXRlbXNTaXplID0gc2VsZWN0LT5saXN0SXRlbXMoKS5zaXplKCk7CiAK
LSAgICBpZiAoaS5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgeworICAgIGlmIChwYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKICAgICAgICAgaW50IGluZGV4
ID0gbV9pbmRleE9mZnNldDsKICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGlzdEl0ZW1zU2l6ZSAm
JiBpbmRleCA8IG1faW5kZXhPZmZzZXQgKyBzaXplKCkpIHsKLSAgICAgICAgICAgIHBhaW50SXRl
bUZvcmVncm91bmQoaSwgdHgsIHR5LCBpbmRleCk7CisgICAgICAgICAgICBwYWludEl0ZW1Gb3Jl
Z3JvdW5kKHBhaW50SW5mbywgdHgsIHR5LCBpbmRleCk7CiAgICAgICAgICAgICBpbmRleCsrOwog
ICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLy8gUGFpbnQgdGhlIGNoaWxkcmVuLgotICAg
IFJlbmRlckJsb2NrOjpwYWludE9iamVjdChpLCB0eCwgdHkpOwotICAgIAotICAgIGlmIChpLnBo
YXNlID09IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQpIHsKKyAgICBSZW5kZXJCbG9jazo6cGFp
bnRPYmplY3QocGFpbnRJbmZvLCB0eCwgdHkpOworCisgICAgaWYgKHBhaW50SW5mby5waGFzZSA9
PSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kKSB7CiAgICAgICAgIGludCBpbmRleCA9IG1faW5k
ZXhPZmZzZXQ7CiAgICAgICAgIHdoaWxlIChpbmRleCA8IGxpc3RJdGVtc1NpemUgJiYgaW5kZXgg
PCBtX2luZGV4T2Zmc2V0ICsgc2l6ZSgpKSB7Ci0gICAgICAgICAgICBwYWludEl0ZW1CYWNrZ3Jv
dW5kKGksIHR4LCB0eSwgaW5kZXgpOworICAgICAgICAgICAgcGFpbnRJdGVtQmFja2dyb3VuZChw
YWludEluZm8sIHR4LCB0eSwgaW5kZXgpOwogICAgICAgICAgICAgaW5kZXgrKzsKICAgICAgICAg
fQotICAgICAgICBwYWludFNjcm9sbGJhcihpKTsKKyAgICAgICAgcGFpbnRTY3JvbGxiYXIocGFp
bnRJbmZvKTsKICAgICB9CiAgICAgLy8gUG9wIHRoZSBjbGlwLgotICAgIGlmIChpLnBoYXNlID09
IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IGkucGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tC
YWNrZ3JvdW5kcykKLSAgICAgICAgaS5wLT5yZXN0b3JlKCk7CisgICAgaWYgKHBhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kcykKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJl
c3RvcmUoKTsKIH0KIAotdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludFNjcm9sbGJhcihQYWludElu
Zm8mIGkpCit2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50U2Nyb2xsYmFyKFBhaW50SW5mbyYgcGFp
bnRJbmZvKQogewogICAgIGlmIChtX3ZCYXIpIHsKICAgICAgICAgSW50UmVjdCBhYnNCb3VuZHMg
PSBhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpOwogICAgICAgICBJbnRSZWN0IHNjcm9sbFJlY3Qo
YWJzQm91bmRzLnJpZ2h0KCkgLSBib3JkZXJSaWdodCgpIC0gbV92QmFyLT53aWR0aCgpLAotICAg
ICAgICAgICAgICAgIGFic0JvdW5kcy55KCkgKyBib3JkZXJUb3AoKSwKLSAgICAgICAgICAgICAg
ICBtX3ZCYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAgYWJzQm91bmRzLmhlaWdodCgpIC0g
KGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFic0JvdW5kcy55KCkgKyBib3JkZXJUb3AoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdkJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic0JvdW5k
cy5oZWlnaHQoKSAtIChib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpKSk7CiAgICAgICAgIG1f
dkJhci0+c2V0UmVjdChzY3JvbGxSZWN0KTsKLSAgICAgICAgbV92QmFyLT5wYWludChpLnAsIHNj
cm9sbFJlY3QpOworICAgICAgICBtX3ZCYXItPnBhaW50KHBhaW50SW5mby5jb250ZXh0LCBzY3Jv
bGxSZWN0KTsKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdy
b3VuZChQYWludEluZm8mIGksIGludCB0eCwgaW50IHR5LCBpbnQgbGlzdEluZGV4KQordm9pZCBS
ZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1Gb3JlZ3JvdW5kKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBp
bnQgdHgsIGludCB0eSwgaW50IGxpc3RJbmRleCkKIHsKICAgICBIVE1MU2VsZWN0RWxlbWVudCog
c2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihub2RlKCkpOwogICAgIGNv
bnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBsaXN0SXRlbXMgPSBzZWxlY3QtPmxpc3RJdGVtcygp
OwogICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2xpc3RJbmRleF07Ci0gICAg
ICAgICAgICAKKwogICAgIFN0cmluZyBpdGVtVGV4dDsKICAgICBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShvcHRpb25UYWcpKQogICAgICAgICBpdGVtVGV4dCA9IHN0YXRpY19jYXN0PEhUTUxPcHRp
b25FbGVtZW50Kj4oZWxlbWVudCktPm9wdGlvblRleHQoKTsKQEAgLTI4NywxMSArMjg3LDEwIEBA
IHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCgKICAgICAgICAgLy8gSG9u
b3IgdGhlIGZvcmVncm91bmQgY29sb3IgZm9yIGRpc2FibGVkIGl0ZW1zCiAgICAgICAgIGVsc2Ug
aWYgKCFlbGVtZW50LT5kaXNhYmxlZCgpKQogICAgICAgICAgICAgdGV4dENvbG9yID0gdGhlbWUo
KS0+aW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7Ci0gICAgICAgICAg
CiAgICAgfQotICAgICAgICAKLSAgICBpLnAtPnNldFBlbih0ZXh0Q29sb3IpOwotICAgIAorCisg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFBlbih0ZXh0Q29sb3IpOworCiAgICAgRm9udCBpdGVt
Rm9udCA9IHN0eWxlKCktPmZvbnQoKTsKICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShvcHRn
cm91cFRhZykpIHsKICAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5mb250RGVz
Y3JpcHRpb24oKTsKQEAgLTI5OSwxNCArMjk4LDE0IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFp
bnRJdGVtRm9yZWdyb3VuZCgKICAgICAgICAgaXRlbUZvbnQgPSBGb250KGQsIGl0ZW1Gb250Lmxl
dHRlclNwYWNpbmcoKSwgaXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CiAgICAgICAgIGl0ZW1Gb250
LnVwZGF0ZSgpOwogICAgIH0KLSAgICBpLnAtPnNldEZvbnQoaXRlbUZvbnQpOworICAgIHBhaW50
SW5mby5jb250ZXh0LT5zZXRGb250KGl0ZW1Gb250KTsKICAgICAKICAgICAvLyBEcmF3IHRoZSBp
dGVtIHRleHQKICAgICBpZiAoaXRlbVN0eWxlLT52aXNpYmlsaXR5KCkgIT0gSElEREVOKQotICAg
ICAgICBpLnAtPmRyYXdUZXh0KHRleHRSdW4sIHIubG9jYXRpb24oKSk7CisgICAgICAgIHBhaW50
SW5mby5jb250ZXh0LT5kcmF3VGV4dCh0ZXh0UnVuLCByLmxvY2F0aW9uKCkpOwogfQogCi12b2lk
IFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUJhY2tncm91bmQoUGFpbnRJbmZvJiBpLCBpbnQgdHgs
IGludCB0eSwgaW50IGxpc3RJbmRleCkKK3ZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtQmFj
a2dyb3VuZChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHksIGludCBsaXN0SW5k
ZXgpCiB7CiAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxT
ZWxlY3RFbGVtZW50Kj4obm9kZSgpKTsKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYg
bGlzdEl0ZW1zID0gc2VsZWN0LT5saXN0SXRlbXMoKTsKQEAgLTMyMyw3ICszMjIsNyBAQCB2b2lk
IFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUJhY2tncm91bmQoCiAKICAgICAvLyBEcmF3IHRoZSBi
YWNrZ3JvdW5kIGZvciB0aGlzIGxpc3QgYm94IGl0ZW0KICAgICBpZiAoIWVsZW1lbnQtPnJlbmRl
clN0eWxlKCkgfHwgZWxlbWVudC0+cmVuZGVyU3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IEhJRERF
TikKLSAgICAgICAgaS5wLT5maWxsUmVjdChpdGVtQm91bmRpbmdCb3hSZWN0KHR4LCB0eSwgbGlz
dEluZGV4KSwgYmFja0NvbG9yKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0
KGl0ZW1Cb3VuZGluZ0JveFJlY3QodHgsIHR5LCBsaXN0SW5kZXgpLCBiYWNrQ29sb3IpOwogfQog
CiBib29sIFJlbmRlckxpc3RCb3g6OmlzUG9pbnRJblNjcm9sbGJhcihIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsIGludCBfeCwgaW50IF95LCBpbnQgX3R4LCBpbnQgX3R5KQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHJldmlzaW9uIDE3NDQ4KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSwzMCAr
MTQ5LDMwIEBAIElubGluZUJveCogUmVuZGVyTGlzdE1hcmtlcjo6Y3JlYXRlSW5saW4KICAgICBy
ZXR1cm4gYm94OwogfQogCi12b2lkIFJlbmRlckxpc3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYg
aSwgaW50IF90eCwgaW50IF90eSkKK3ZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogewotICAgIGlmIChpLnBoYXNlICE9IFBh
aW50UGhhc2VGb3JlZ3JvdW5kKQorICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFz
ZUZvcmVncm91bmQpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBpZiAoc3R5bGUoKS0+dmlz
aWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJlY3QgbWFy
a2VyID0gZ2V0UmVsYXRpdmVNYXJrZXJSZWN0KCk7Ci0gICAgbWFya2VyLm1vdmUoX3R4LCBfdHkp
OworICAgIG1hcmtlci5tb3ZlKHR4LCB0eSk7CiAKLSAgICBJbnRSZWN0IGJveChfdHggKyBtX3gs
IF90eSArIG1feSwgbV93aWR0aCwgbV9oZWlnaHQpOworICAgIEludFJlY3QgYm94KHR4ICsgbV94
LCB0eSArIG1feSwgbV93aWR0aCwgbV9oZWlnaHQpOwogCi0gICAgaWYgKGJveC55KCkgPiBpLnIu
Ym90dG9tKCkgfHwgYm94LnkoKSArIGJveC5oZWlnaHQoKSA8IGkuci55KCkpCisgICAgaWYgKGJv
eC55KCkgPiBwYWludEluZm8ucmVjdC5ib3R0b20oKSB8fCBib3gueSgpICsgYm94LmhlaWdodCgp
IDwgcGFpbnRJbmZvLnJlY3QueSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxk
UGFpbnRCYWNrZ3JvdW5kT3JCb3JkZXIoKSkgCi0gICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMo
aSwgYm94LngoKSwgYm94LnkoKSk7CisgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJ
bmZvLCBib3gueCgpLCBib3gueSgpKTsKIAotICAgIEdyYXBoaWNzQ29udGV4dCogcCA9IGkucDsK
LSAgICBwLT5zZXRGb250KHN0eWxlKCktPmZvbnQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CisgICAgY29udGV4dC0+c2V0Rm9udChzdHlsZSgp
LT5mb250KCkpOwogCiAgICAgaWYgKGRvY3VtZW50KCktPnByaW50aW5nKCkpIHsKLSAgICAgICAg
aWYgKGJveC55KCkgPCBpLnIueSgpKQorICAgICAgICBpZiAoYm94LnkoKSA8IHBhaW50SW5mby5y
ZWN0LnkoKSkKICAgICAgICAgICAgIC8vIFRoaXMgaGFzIGJlZW4gcHJpbnRlZCBhbHJlYWR5IHdl
IHN1cHBvc2UuCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIApAQCAtMTg3LDQ0ICsxODcs
NDQgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogCiAgICAgaWYg
KG1fbGlzdEltYWdlICYmICFtX2xpc3RJbWFnZS0+aXNFcnJvckltYWdlKCkpIHsKICNpZiBQTEFU
Rk9STShNQUMpCi0gICAgICAgIGlmIChzdHlsZSgpLT5oaWdobGlnaHQoKSAhPSBudWxsQXRvbSAm
JiAhaS5wLT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgICAgICBwYWludEN1c3RvbUhpZ2hs
aWdodChfdHgsIF90eSwgc3R5bGUoKS0+aGlnaGxpZ2h0KCksIHRydWUpOworICAgICAgICBpZiAo
c3R5bGUoKS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0b20gJiYgIXBhaW50SW5mby5jb250ZXh0LT5w
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdodCh0eCwg
dHksIHN0eWxlKCktPmhpZ2hsaWdodCgpLCB0cnVlKTsKICNlbmRpZgotICAgICAgICBwLT5kcmF3
SW1hZ2UobV9saXN0SW1hZ2UtPmltYWdlKCksIG1hcmtlci5sb2NhdGlvbigpKTsKKyAgICAgICAg
Y29udGV4dC0+ZHJhd0ltYWdlKG1fbGlzdEltYWdlLT5pbWFnZSgpLCBtYXJrZXIubG9jYXRpb24o
KSk7CiAgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUpCi0gICAg
ICAgICAgICBwLT5maWxsUmVjdChzZWxlY3Rpb25SZWN0KCksIHNlbGVjdGlvbkJhY2tncm91bmRD
b2xvcigpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KHNlbGVjdGlvblJlY3QoKSwg
c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAj
aWZkZWYgQk9YX0RFQlVHCi0gICAgcC0+c2V0UGVuKHJlZCk7Ci0gICAgcC0+ZHJhd1JlY3QoYm94
LngoKSwgYm94LnkoKSwgYm94LndpZHRoKCksIGJveC5oZWlnaHQoKSk7CisgICAgY29udGV4dC0+
c2V0UGVuKHJlZCk7CisgICAgY29udGV4dC0+ZHJhd1JlY3QoYm94LngoKSwgYm94LnkoKSwgYm94
LndpZHRoKCksIGJveC5oZWlnaHQoKSk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKE1BQykKICAg
ICAvLyBGSVhNRTogcGFpbnQgZ2FwIGJldHdlZW4gbWFya2VyIGFuZCBsaXN0IGl0ZW0gcHJvcGVy
Ci0gICAgaWYgKHN0eWxlKCktPmhpZ2hsaWdodCgpICE9IG51bGxBdG9tICYmICFpLnAtPnBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcGFpbnRDdXN0b21IaWdobGlnaHQoX3R4LCBfdHksIHN0
eWxlKCktPmhpZ2hsaWdodCgpLCB0cnVlKTsKKyAgICBpZiAoc3R5bGUoKS0+aGlnaGxpZ2h0KCkg
IT0gbnVsbEF0b20gJiYgIXBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KHR4LCB0eSwgc3R5bGUoKS0+aGlnaGxpZ2h0KCks
IHRydWUpOwogI2VuZGlmCiAKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25O
b25lKQotICAgICAgICBwLT5maWxsUmVjdChzZWxlY3Rpb25SZWN0KCksIHNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvcigpKTsKKyAgICAgICAgY29udGV4dC0+ZmlsbFJlY3Qoc2VsZWN0aW9uUmVjdCgp
LCBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSk7CiAKICAgICBjb25zdCBDb2xvciBjb2xvcihz
dHlsZSgpLT5jb2xvcigpKTsKLSAgICBwLT5zZXRQZW4oY29sb3IpOworICAgIGNvbnRleHQtPnNl
dFBlbihjb2xvcik7CiAKICAgICBzd2l0Y2goc3R5bGUoKS0+bGlzdFN0eWxlVHlwZSgpKSB7CiAg
ICAgY2FzZSBESVNDOgotICAgICAgICBwLT5zZXRGaWxsQ29sb3IoY29sb3IucmdiKCkpOwotICAg
ICAgICBwLT5kcmF3RWxsaXBzZShtYXJrZXIpOworICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29s
b3IoY29sb3IucmdiKCkpOworICAgICAgICBjb250ZXh0LT5kcmF3RWxsaXBzZShtYXJrZXIpOwog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDSVJDTEU6Ci0gICAgICAgIHAtPnNldEZpbGxDb2xv
cihDb2xvcjo6dHJhbnNwYXJlbnQpOwotICAgICAgICBwLT5kcmF3RWxsaXBzZShtYXJrZXIpOwor
ICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICAg
ICAgY29udGV4dC0+ZHJhd0VsbGlwc2UobWFya2VyKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgU1FVQVJFOgotICAgICAgICBwLT5zZXRGaWxsQ29sb3IoY29sb3IucmdiKCkpOwotICAgICAg
ICBwLT5kcmF3UmVjdChtYXJrZXIpOworICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoY29s
b3IucmdiKCkpOworICAgICAgICBjb250ZXh0LT5kcmF3UmVjdChtYXJrZXIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBMTk9ORToKICAgICAgICAgcmV0dXJuOwpAQCAtMjM0LDE1ICsyMzQs
MTUgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgICAgICAg
ICAgVGV4dFJ1biB0ZXh0UnVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihtX2l0ZW0u
dW5pY29kZSgpKSwgbV9pdGVtLmxlbmd0aCgpKTsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBMVFIpIHsKICAgICAgICAgICAgICAgICBpbnQgd2lkdGggPSBmb250Lndp
ZHRoKHRleHRSdW4pOwotICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KHRleHRSdW4sIG1hcmtl
ci5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3VGV4dCh0ZXh0UnVu
LCBtYXJrZXIubG9jYXRpb24oKSk7CiAgICAgICAgICAgICAgICAgVUNoYXIgcGVyaW9kU3BhY2Vb
Ml0gPSB7ICcuJywgJyAnIH07Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQoVGV4dFJ1bihw
ZXJpb2RTcGFjZSwgMiksIG1hcmtlci5sb2NhdGlvbigpICsgSW50U2l6ZSh3aWR0aCwgMCkpOwor
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KFRleHRSdW4ocGVyaW9kU3BhY2UsIDIp
LCBtYXJrZXIubG9jYXRpb24oKSArIEludFNpemUod2lkdGgsIDApKTsKICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgVUNoYXIgc3BhY2VQZXJpb2RbMl0gPSB7ICcgJywgJy4n
IH07CiAgICAgICAgICAgICAgICAgVGV4dFJ1biBzcGFjZVBlcmlvZFJ1bihzcGFjZVBlcmlvZCwg
Mik7CiAgICAgICAgICAgICAgICAgaW50IHdpZHRoID0gZm9udC53aWR0aChzcGFjZVBlcmlvZFJ1
bik7Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQoc3BhY2VQZXJpb2RSdW4sIG1hcmtlci5s
b2NhdGlvbigpKTsKLSAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dCh0ZXh0UnVuLCBtYXJrZXIu
bG9jYXRpb24oKSArIEludFNpemUod2lkdGgsIDApKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5kcmF3VGV4dChzcGFjZVBlcmlvZFJ1biwgbWFya2VyLmxvY2F0aW9uKCkpOworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KHRleHRSdW4sIG1hcmtlci5sb2NhdGlvbigpICsgSW50
U2l6ZSh3aWR0aCwgMCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gMTc0NDcpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nywy
NSArMTY3LDI1IEBAIFN0cmluZyBSZW5kZXJNZW51TGlzdDo6dGV4dCgpCiAgICAgcmV0dXJuIG1f
YnV0dG9uVGV4dCA/IG1fYnV0dG9uVGV4dC0+ZGF0YSgpIDogU3RyaW5nKCk7CiB9CiAKLXZvaWQg
UmVuZGVyTWVudUxpc3Q6OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgaSwgaW50IHgsIGludCB5KQor
dm9pZCBSZW5kZXJNZW51TGlzdDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGlu
dCB4LCBpbnQgeSkKIHsKICAgICAvLyBQdXNoIGEgY2xpcC4KLSAgICBpZiAoaS5waGFzZSA9PSBQ
YWludFBoYXNlRm9yZWdyb3VuZCkgeworICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZUZvcmVncm91bmQpIHsKICAgICAgICAgSW50UmVjdCBjbGlwUmVjdCh4ICsgYm9yZGVyTGVm
dCgpICsgcGFkZGluZ0xlZnQoKSwgeSArIGJvcmRlclRvcCgpICsgcGFkZGluZ1RvcCgpLAogICAg
ICAgICAgICAgd2lkdGgoKSAtIGJvcmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCkgLSBwYWRkaW5n
TGVmdCgpIC0gcGFkZGluZ1JpZ2h0KCksCiAgICAgICAgICAgICBoZWlnaHQoKSAtIGJvcmRlckJv
dHRvbSgpIC0gYm9yZGVyVG9wKCkgLSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5nQm90dG9tKCkpOwog
ICAgICAgICBpZiAoY2xpcFJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBpLnAtPnNhdmUoKTsKLSAgICAgICAgaS5wLT5jbGlwKGNsaXBSZWN0KTsKKyAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNs
aXAoY2xpcFJlY3QpOwogICAgIH0KIAogICAgIC8vIFBhaW50IHRoZSBjaGlsZHJlbi4KLSAgICBS
ZW5kZXJCbG9jazo6cGFpbnRPYmplY3QoaSwgeCwgeSk7CisgICAgUmVuZGVyQmxvY2s6OnBhaW50
T2JqZWN0KHBhaW50SW5mbywgeCwgeSk7CiAKICAgICAvLyBQb3AgdGhlIGNsaXAuCi0gICAgaWYg
KGkucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCi0gICAgICAgIGkucC0+cmVzdG9yZSgp
OworICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCisgICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKIHZvaWQgUmVuZGVyTWVudUxp
c3Q6OmNhbGNNaW5NYXhXaWR0aCgpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJ
KHJldmlzaW9uIDE3NDQ3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTczMSw3ICsxNzMxLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnBh
aW50T3V0bGluZShHcmFwaGljcwogCiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpwYWludChQYWlu
dEluZm8mIGksIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50KFBhaW50
SW5mbyYgLypwYWludEluZm8qLywgaW50IC8qdHgqLywgaW50IC8qdHkqLykKIHsKIH0KIApJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDE3NDQ3KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxOSwyMiArNDE5LDMx
IEBAIHB1YmxpYzoKICAgICAgKiAodHh8dHkpIGlzIHRoZSBjYWxjdWxhdGVkIHBvc2l0aW9uIG9m
IHRoZSBwYXJlbnQKICAgICAgKi8KICAgICBzdHJ1Y3QgUGFpbnRJbmZvIHsKLSAgICAgICAgUGFp
bnRJbmZvKEdyYXBoaWNzQ29udGV4dCogX3AsIGNvbnN0IEludFJlY3QmIF9yLCBQYWludFBoYXNl
IF9waGFzZSwgYm9vbCBfZm9yY2VXaGl0ZVRleHQsIFJlbmRlck9iamVjdCogX3BhaW50aW5nUm9v
dCwgUmVuZGVyRmxvd1NlcXVlbmNlZFNldCogX291dGxpbmVPYmplY3RzKQotICAgICAgICAgICAg
OiBwKF9wKSwgcihfciksIHBoYXNlKF9waGFzZSksIGZvcmNlV2hpdGVUZXh0KF9mb3JjZVdoaXRl
VGV4dCksIHBhaW50aW5nUm9vdChfcGFpbnRpbmdSb290KSwgb3V0bGluZU9iamVjdHMoX291dGxp
bmVPYmplY3RzKSB7fQotICAgICAgICBHcmFwaGljc0NvbnRleHQqIHA7Ci0gICAgICAgIEludFJl
Y3QgcjsKKyAgICAgICAgUGFpbnRJbmZvKEdyYXBoaWNzQ29udGV4dCogbmV3Q29udGV4dCwgY29u
c3QgSW50UmVjdCYgbmV3UmVjdCwgUGFpbnRQaGFzZSBuZXdQaGFzZSwgYm9vbCBuZXdGb3JjZVdo
aXRlVGV4dCwgUmVuZGVyT2JqZWN0KiBuZXdQYWludGluZ1Jvb3QsIFJlbmRlckZsb3dTZXF1ZW5j
ZWRTZXQqIG5ld091dGxpbmVPYmplY3RzKQorICAgICAgICAgICAgOiBjb250ZXh0KG5ld0NvbnRl
eHQpCisgICAgICAgICAgICAsIHJlY3QobmV3UmVjdCkKKyAgICAgICAgICAgICwgcGhhc2UobmV3
UGhhc2UpCisgICAgICAgICAgICAsIGZvcmNlV2hpdGVUZXh0KG5ld0ZvcmNlV2hpdGVUZXh0KQor
ICAgICAgICAgICAgLCBwYWludGluZ1Jvb3QobmV3UGFpbnRpbmdSb290KQorICAgICAgICAgICAg
LCBvdXRsaW5lT2JqZWN0cyhuZXdPdXRsaW5lT2JqZWN0cykKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0OworICAgICAgICBJbnRSZWN0IHJl
Y3Q7CiAgICAgICAgIFBhaW50UGhhc2UgcGhhc2U7CiAgICAgICAgIGJvb2wgZm9yY2VXaGl0ZVRl
eHQ7CiAgICAgICAgIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290OyAvLyB1c2VkIHRvIGRyYXcg
anVzdCBvbmUgZWxlbWVudCBhbmQgaXRzIHZpc3VhbCBraWRzCiAgICAgICAgIFJlbmRlckZsb3dT
ZXF1ZW5jZWRTZXQqIG91dGxpbmVPYmplY3RzOyAvLyB1c2VkIHRvIGxpc3Qgb3V0bGluZXMgdGhh
dCBzaG91bGQgYmUgcGFpbnRlZCBieSBhIGJsb2NrIHdpdGggaW5saW5lIGNoaWxkcmVuCiAgICAg
fTsKKwogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7
CiAgICAgdm9pZCBwYWludEJvcmRlcihHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSwg
aW50IHcsIGludCBoLCBjb25zdCBSZW5kZXJTdHlsZSosIGJvb2wgYmVnaW4gPSB0cnVlLCBib29s
IGVuZCA9IHRydWUpOwogICAgIGJvb2wgcGFpbnRCb3JkZXJJbWFnZShHcmFwaGljc0NvbnRleHQq
LCBpbnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUp
OwogICAgIHZvaWQgcGFpbnRPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5
LCBpbnQgdywgaW50IGgsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSk7CiAKICAgICAvLyBSZW5k
ZXJCb3ggaW1wbGVtZW50cyB0aGlzLgotICAgIHZpcnR1YWwgdm9pZCBwYWludEJveERlY29yYXRp
b25zKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KSB7fQorICAgIHZpcnR1YWwgdm9pZCBwYWlu
dEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KSB7IH0KIAogICAgIHZp
cnR1YWwgdm9pZCBwYWludEJhY2tncm91bmRFeHRlbmRlZChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBDb2xvciYsIGNvbnN0IEJhY2tncm91bmRMYXllciosIGludCBjbGlweSwgaW50IGNsaXBoLAog
ICAgICAgICBpbnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoZWlnaHQsIGludCBibGVmdCwgaW50
IGJyaWdodCwgaW50IHBsZWZ0LCBpbnQgcHJpZ2h0KSB7fQpAQCAtODU4LDE4ICs4NjcsMTkgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKGludCYgc3Bvcywg
aW50JiBlcG9zKTsKIAotICAgIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290Rm9yQ2hpbGRyZW4o
UGFpbnRJbmZvICZpKSBjb25zdCB7CisgICAgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JD
aGlsZHJlbihQYWludEluZm8mIHBhaW50SW5mbykgY29uc3QKKyAgICB7CiAgICAgICAgIC8vIGlm
IHdlJ3JlIHRoZSBwYWludGluZyByb290LCBraWRzIGRyYXcgbm9ybWFsbHksIGFuZCBzZWUgcm9v
dCBvZiAwCi0gICAgICAgIHJldHVybiAoIWkucGFpbnRpbmdSb290IHx8IGkucGFpbnRpbmdSb290
ID09IHRoaXMpID8gMCA6IGkucGFpbnRpbmdSb290OworICAgICAgICByZXR1cm4gKCFwYWludElu
Zm8ucGFpbnRpbmdSb290IHx8IHBhaW50SW5mby5wYWludGluZ1Jvb3QgPT0gdGhpcykgPyAwIDog
cGFpbnRJbmZvLnBhaW50aW5nUm9vdDsKICAgICB9CiAKLSAgICBib29sIHNob3VsZFBhaW50V2l0
aGluUm9vdChQYWludEluZm8gJmkpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuICFpLnBhaW50aW5n
Um9vdCB8fCBpLnBhaW50aW5nUm9vdCA9PSB0aGlzOworICAgIGJvb2wgc2hvdWxkUGFpbnRXaXRo
aW5Sb290KFBhaW50SW5mbyYgcGFpbnRJbmZvKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICFwYWludEluZm8ucGFpbnRpbmdSb290IHx8IHBhaW50SW5mby5wYWludGluZ1Jvb3QgPT0gdGhp
czsKICAgICB9Ci0gICAgCisKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgcHJpbnRCb3hE
ZWNvcmF0aW9ucyhHcmFwaGljc0NvbnRleHQqLCBpbnQgLyp4Ki8sIGludCAvKnkqLywKLSAgICAg
ICAgaW50IC8qdyovLCBpbnQgLypoKi8sIGludCAvKnR4Ki8sIGludCAvKnR5Ki8pIHt9CisgICAg
dmlydHVhbCB2b2lkIHByaW50Qm94RGVjb3JhdGlvbnMoR3JhcGhpY3NDb250ZXh0KiwgaW50IC8q
eCovLCBpbnQgLyp5Ki8sIGludCAvKncqLywgaW50IC8qaCovLCBpbnQgLyp0eCovLCBpbnQgLyp0
eSovKSB7IH0KIAogICAgIHZpcnR1YWwgSW50UmVjdCB2aWV3UmVjdCgpIGNvbnN0OwogCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJQYXRoLmNwcAkocmV2aXNpb24gMTc0NDcpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJQYXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDIzICsxNjMsMjMg
QEAgc2hvcnQgUmVuZGVyUGF0aDo6YmFzZWxpbmVQb3NpdGlvbihib29sIAogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxzaG9ydD4ocmVsYXRpdmVCQm94KHRydWUpLmhlaWdodCgpKTsKIH0KIAotdm9p
ZCBSZW5kZXJQYXRoOjpwYWludChQYWludEluZm8gJnBhaW50SW5mbywgaW50IHBhcmVudFgsIGlu
dCBwYXJlbnRZKQordm9pZCBSZW5kZXJQYXRoOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywg
aW50IHBhcmVudFgsIGludCBwYXJlbnRZKQogewogICAgIC8vIE5vIG9uZSBzaG91bGQgYmUgdHJh
bnNmb3JtaW5nIHVzIHZpYSB0aGVzZS4KICAgICAvL0FTU0VSVChwYXJlbnRYID09IDApOwogICAg
IC8vQVNTRVJUKHBhcmVudFkgPT0gMCk7CiAKLSAgICBpZiAocGFpbnRJbmZvLnAtPnBhaW50aW5n
RGlzYWJsZWQoKSB8fCAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB8
fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8IHBhdGgoKS5pc0VtcHR5KCkpCisg
ICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgKHBhaW50SW5m
by5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgp
ID09IEhJRERFTiB8fCBwYXRoKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAg
ICAgS1JlbmRlcmluZ0RldmljZSogZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7CiAgICAgS1Jl
bmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQgPSBkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCk7
CiAgICAgYm9vbCBzaG91bGRQb3BDb250ZXh0ID0gZmFsc2U7CiAgICAgaWYgKGNvbnRleHQpCi0g
ICAgICAgIHBhaW50SW5mby5wLT5zYXZlKCk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5z
YXZlKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIE5lZWQgdG8gc2V0IHVwIEtDYW52YXMgcmVu
ZGVyaW5nIGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gZG9uZS4KLSAgICAgICAgY29udGV4dCA9
IHBhaW50SW5mby5wLT5jcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCk7CisgICAgICAgIGNv
bnRleHQgPSBwYWludEluZm8uY29udGV4dC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgp
OwogICAgICAgICBkZXZpY2UtPnB1c2hDb250ZXh0KGNvbnRleHQpOwogICAgICAgICBzaG91bGRQ
b3BDb250ZXh0ID0gdHJ1ZTsKICAgICB9CkBAIC0yMDEsMjAgKzIwMSwyMCBAQCB2b2lkIFJlbmRl
clBhdGg6OnBhaW50KFBhaW50SW5mbyAmcGFpbnRJCiAKICAgICBjb250ZXh0LT5jbGVhclBhdGgo
KTsKICAgICAKLSAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKmZpbGxQYWludFNlcnZlciA9IEtT
VkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50U2VydmVyKHN0eWxlKCksIHRoaXMpOworICAgIEtS
ZW5kZXJpbmdQYWludFNlcnZlciogZmlsbFBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5
OjpmaWxsUGFpbnRTZXJ2ZXIoc3R5bGUoKSwgdGhpcyk7CiAgICAgaWYgKGZpbGxQYWludFNlcnZl
cikgewogICAgICAgICBjb250ZXh0LT5hZGRQYXRoKHBhdGgoKSk7CiAgICAgICAgIGZpbGxQYWlu
dFNlcnZlci0+c2V0QWN0aXZlQ2xpZW50KHRoaXMpOwogICAgICAgICBmaWxsUGFpbnRTZXJ2ZXIt
PmRyYXcoY29udGV4dCwgdGhpcywgQVBQTFlfVE9fRklMTCk7CiAgICAgfQotICAgIEtSZW5kZXJp
bmdQYWludFNlcnZlciAqc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0
cm9rZVBhaW50U2VydmVyKHN0eWxlKCksIHRoaXMpOworICAgIEtSZW5kZXJpbmdQYWludFNlcnZl
ciogc3Ryb2tlUGFpbnRTZXJ2ZXIgPSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50U2Vy
dmVyKHN0eWxlKCksIHRoaXMpOwogICAgIGlmIChzdHJva2VQYWludFNlcnZlcikgewogICAgICAg
ICBjb250ZXh0LT5hZGRQYXRoKHBhdGgoKSk7IC8vIHBhdGggaXMgY2xlYXJlZCB3aGVuIGZpbGxl
ZC4KICAgICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldEFjdGl2ZUNsaWVudCh0aGlzKTsKICAg
ICAgICAgc3Ryb2tlUGFpbnRTZXJ2ZXItPmRyYXcoY29udGV4dCwgdGhpcywgQVBQTFlfVE9fU1RS
T0tFKTsKICAgICB9CiAKLSAgICBkcmF3TWFya2Vyc0lmTmVlZGVkKHBhaW50SW5mby5wLCBwYWlu
dEluZm8uciwgcGF0aCgpKTsKKyAgICBkcmF3TWFya2Vyc0lmTmVlZGVkKHBhaW50SW5mby5jb250
ZXh0LCBwYWludEluZm8ucmVjdCwgcGF0aCgpKTsKIAogICAgIC8vIGFjdHVhbGx5IGFwcGx5IHRo
ZSBmaWx0ZXIKICAgICBpZiAoZmlsdGVyKQpAQCAtMjIyLDcgKzIyMiw3IEBAIHZvaWQgUmVuZGVy
UGF0aDo6cGFpbnQoUGFpbnRJbmZvICZwYWludEkKIAogICAgIC8vIHJlc3RvcmUgZHJhd2luZyBz
dGF0ZQogICAgIGlmICghc2hvdWxkUG9wQ29udGV4dCkKLSAgICAgICAgcGFpbnRJbmZvLnAtPnJl
c3RvcmUoKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICBlbHNl
IHsKICAgICAgICAgZGV2aWNlLT5wb3BDb250ZXh0KCk7CiAgICAgICAgIGRlbGV0ZSBjb250ZXh0
OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkocmV2aXNpb24gMTc0NDcp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDM2ICs0MSwzNiBAQCBSZW5kZXJSZXBsYWNlZDo6UmVuZGVyUmVwbGFjZWQoTm9kZSog
bm9kCiAgICAgbV9zZWxlY3Rpb25TdGF0ZSA9IFNlbGVjdGlvbk5vbmU7CiB9CiAKLWJvb2wgUmVu
ZGVyUmVwbGFjZWQ6OnNob3VsZFBhaW50KFBhaW50SW5mbyYgaSwgaW50JiBfdHgsIGludCYgX3R5
KQorYm9vbCBSZW5kZXJSZXBsYWNlZDo6c2hvdWxkUGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8s
IGludCYgdHgsIGludCYgdHkpCiB7Ci0gICAgaWYgKGkucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVn
cm91bmQgJiYgaS5waGFzZSAhPSBQYWludFBoYXNlT3V0bGluZSAmJiBpLnBoYXNlICE9IFBhaW50
UGhhc2VTZWxmT3V0bGluZSAKLSAgICAgICAgJiYgaS5waGFzZSAhPSBQYWludFBoYXNlU2VsZWN0
aW9uKQorICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgJiYg
cGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VPdXRsaW5lICYmIHBhaW50SW5mby5waGFzZSAh
PSBQYWludFBoYXNlU2VsZk91dGxpbmUgCisgICAgICAgICAgICAmJiBwYWludEluZm8ucGhhc2Ug
IT0gUGFpbnRQaGFzZVNlbGVjdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYg
KCFzaG91bGRQYWludFdpdGhpblJvb3QoaSkpCisgICAgaWYgKCFzaG91bGRQYWludFdpdGhpblJv
b3QocGFpbnRJbmZvKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAvLyBp
ZiB3ZSdyZSBpbnZpc2libGUgb3IgaGF2ZW4ndCByZWNlaXZlZCBhIGxheW91dCB5ZXQsIHRoZW4g
anVzdCBiYWlsLgogICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaW50IHR4ID0gX3R4ICsgbV94OwotICAgIGludCB0
eSA9IF90eSArIG1feTsKKyAgICBpbnQgY3VycmVudFRYID0gdHggKyBtX3g7CisgICAgaW50IGN1
cnJlbnRUWSA9IHR5ICsgbV95OwogCiAgICAgLy8gRWFybHkgZXhpdCBpZiB0aGUgZWxlbWVudCB0
b3VjaGVzIHRoZSBlZGdlcy4KLSAgICBpbnQgdG9wID0gdHk7Ci0gICAgaW50IGJvdHRvbSA9IHR5
ICsgbV9oZWlnaHQ7CisgICAgaW50IHRvcCA9IGN1cnJlbnRUWTsKKyAgICBpbnQgYm90dG9tID0g
Y3VycmVudFRZICsgbV9oZWlnaHQ7CiAgICAgaWYgKGlzU2VsZWN0ZWQoKSAmJiBtX2lubGluZUJv
eFdyYXBwZXIpIHsKLSAgICAgICAgaW50IHNlbFRvcCA9IF90eSArIG1faW5saW5lQm94V3JhcHBl
ci0+cm9vdCgpLT5zZWxlY3Rpb25Ub3AoKTsKLSAgICAgICAgaW50IHNlbEJvdHRvbSA9IF90eSAr
IHNlbFRvcCArIG1faW5saW5lQm94V3JhcHBlci0+cm9vdCgpLT5zZWxlY3Rpb25IZWlnaHQoKTsK
KyAgICAgICAgaW50IHNlbFRvcCA9IHR5ICsgbV9pbmxpbmVCb3hXcmFwcGVyLT5yb290KCktPnNl
bGVjdGlvblRvcCgpOworICAgICAgICBpbnQgc2VsQm90dG9tID0gdHkgKyBzZWxUb3AgKyBtX2lu
bGluZUJveFdyYXBwZXItPnJvb3QoKS0+c2VsZWN0aW9uSGVpZ2h0KCk7CiAgICAgICAgIHRvcCA9
IG1pbihzZWxUb3AsIHRvcCk7CiAgICAgICAgIGJvdHRvbSA9IG1heChzZWxCb3R0b20sIGJvdHRv
bSk7CiAgICAgfQogICAgIAotICAgIGludCBvcyA9IDIqbWF4aW1hbE91dGxpbmVTaXplKGkucGhh
c2UpOwotICAgIGlmICh0eCA+PSBpLnIucmlnaHQoKSArIG9zIHx8IHR4ICsgbV93aWR0aCA8PSBp
LnIueCgpIC0gb3MpCisgICAgaW50IG9zID0gMiAqIG1heGltYWxPdXRsaW5lU2l6ZShwYWludElu
Zm8ucGhhc2UpOworICAgIGlmIChjdXJyZW50VFggPj0gcGFpbnRJbmZvLnJlY3QucmlnaHQoKSAr
IG9zIHx8IGN1cnJlbnRUWCArIG1fd2lkdGggPD0gcGFpbnRJbmZvLnJlY3QueCgpIC0gb3MpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAodG9wID49IGkuci5ib3R0b20oKSArIG9zIHx8
IGJvdHRvbSA8PSBpLnIueSgpIC0gb3MpCisgICAgaWYgKHRvcCA+PSBwYWludEluZm8ucmVjdC5i
b3R0b20oKSArIG9zIHx8IGJvdHRvbSA8PSBwYWludEluZm8ucmVjdC55KCkgLSBvcykKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHJldmlzaW9uIDE3NDQ3KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDE4
ICsxMjcsMTggQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmxheW91dCgpCiAKIHZvaWQgUmVu
ZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHBhcmVudFgs
IGludCBwYXJlbnRZKQogewotICAgIGlmIChwYWludEluZm8ucC0+cGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgCisKICAgICAvLyBObyBvbmUgc2hvdWxkIGJlIHRyYW5zZm9ybWluZyB1
cyB2aWEgdGhlc2UuCiAgICAgLy9BU1NFUlQobV94ID09IDApOwogICAgIC8vQVNTRVJUKG1feSA9
PSAwKTsKLSAgICAgICAgCisKICAgICBpZiAoc2hvdWxkUGFpbnRCYWNrZ3JvdW5kT3JCb3JkZXIo
KSAmJiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHBhaW50SW5m
by5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKSkgCiAgICAgICAgIHBhaW50Qm94RGVjb3Jh
dGlvbnMocGFpbnRJbmZvLCBwYXJlbnRYLCBwYXJlbnRZKTsKLSAgICAKKwogICAgIGlmICgocGFp
bnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IHBhaW50SW5mby5waGFzZSA9PSBQ
YWludFBoYXNlU2VsZk91dGxpbmUpICYmIHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIHN0eWxl
KCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQotICAgICAgICBwYWludE91dGxpbmUocGFpbnRJ
bmZvLnAsIHBhcmVudFgsIHBhcmVudFksIHdpZHRoKCksIGhlaWdodCgpLCBzdHlsZSgpKTsKKyAg
ICAgICAgcGFpbnRPdXRsaW5lKHBhaW50SW5mby5jb250ZXh0LCBwYXJlbnRYLCBwYXJlbnRZLCB3
aWR0aCgpLCBoZWlnaHQoKSwgc3R5bGUoKSk7CiAgICAgCiAgICAgaWYgKHBhaW50SW5mby5waGFz
ZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCAhZHJhd3NDb250ZW50cygpIHx8IHN0eWxlKCkt
PnZpc2liaWxpdHkoKSA9PSBISURERU4pCiAgICAgICAgIHJldHVybjsKQEAgLTE1MiwxMiArMTUy
LDEyIEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWludEluZm8KICAgICBib29s
IHNob3VsZFBvcENvbnRleHQgPSBmYWxzZTsKICAgICBpZiAoIWRldmljZUNvbnRleHQpIHsKICAg
ICAgICAgLy8gSSBvbmx5IG5lZWQgdG8gc2V0dXAgZm9yIEtDYW52YXMgcmVuZGVyaW5nIGlmIGl0
IGhhc24ndCBhbHJlYWR5IGJlZW4gZG9uZS4KLSAgICAgICAgZGV2aWNlQ29udGV4dCA9IHBhaW50
SW5mby5wLT5jcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCk7CisgICAgICAgIGRldmljZUNv
bnRleHQgPSBwYWludEluZm8uY29udGV4dC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgp
OwogICAgICAgICBkZXZpY2UtPnB1c2hDb250ZXh0KGRldmljZUNvbnRleHQpOwogICAgICAgICBz
aG91bGRQb3BDb250ZXh0ID0gdHJ1ZTsKICAgICB9IGVsc2UKLSAgICAgICAgcGFpbnRJbmZvLnAt
PnNhdmUoKTsKLSAgICAKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKKwogICAg
IGlmIChwYXJlbnRYICE9IDAgfHwgcGFyZW50WSAhPSAwKSB7CiAgICAgICAgIC8vIFRyYW5zbGF0
ZSBmcm9tIHBhcmVudCBvZmZzZXRzIChodG1sIHJlbmRlcmVycykgdG8gYSByZWxhdGl2ZSB0cmFu
c2Zvcm0gKHN2ZyByZW5kZXJlcnMpCiAgICAgICAgIGRldmljZUNvbnRleHQtPmNvbmNhdENUTShB
ZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUocGFyZW50WCwgcGFyZW50WSkpOwpAQCAtMTY2LDEw
ICsxNjYsMTAgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KFBhaW50SW5mbwogICAg
IAogICAgIGlmICghdmlld3BvcnQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKHN0eWxlKCkt
Pm92ZXJmbG93WCgpICE9IE9WSVNJQkxFKQotICAgICAgICAgICAgcGFpbnRJbmZvLnAtPmNsaXAo
ZW5jbG9zaW5nSW50UmVjdCh2aWV3cG9ydCgpKSk7IC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlJ2xs
IHdhbnQgZmxvYXQtcHJlY2lzaW9uIGNsaXBwaW5nCisgICAgICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+Y2xpcChlbmNsb3NpbmdJbnRSZWN0KHZpZXdwb3J0KCkpKTsgLy8gRklYTUU6IEV2ZW50
dWFsbHkgd2UnbGwgd2FudCBmbG9hdC1wcmVjaXNpb24gY2xpcHBpbmcKICAgICAgICAgZGV2aWNl
Q29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZSh2aWV3cG9ydCgp
LngoKSwgdmlld3BvcnQoKS55KCkpKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoIWxvY2FsVHJh
bnNmb3JtKCkuaXNJZGVudGl0eSgpKQogICAgICAgICBkZXZpY2VDb250ZXh0LT5jb25jYXRDVE0o
bG9jYWxUcmFuc2Zvcm0oKSk7CiAgICAgCkBAIC0xODMsOCArMTgzLDggQEAgdm9pZCBSZW5kZXJT
VkdDb250YWluZXI6OnBhaW50KFBhaW50SW5mbwogCiAgICAgZmxvYXQgb3BhY2l0eSA9IHN0eWxl
KCktPm9wYWNpdHkoKTsKICAgICBpZiAob3BhY2l0eSA8IDEuMGYpIHsKLSAgICAgICAgcGFpbnRJ
bmZvLnAtPmNsaXAoZW5jbG9zaW5nSW50UmVjdChzdHJva2VCQm94KSk7Ci0gICAgICAgIHBhaW50
SW5mby5wLT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOworICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+Y2xpcChlbmNsb3NpbmdJbnRSZWN0KHN0cm9rZUJCb3gpKTsKKyAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CiAgICAg
fQogCiAgICAgaWYgKGZpbHRlcikKQEAgLTE5MiwyMSArMTkyLDIxIEBAIHZvaWQgUmVuZGVyU1ZH
Q29udGFpbmVyOjpwYWludChQYWludEluZm8KICAgICAKICAgICBpZiAoIXZpZXdCb3goKS5pc0Vt
cHR5KCkpCiAgICAgICAgIGRldmljZUNvbnRleHQtPmNvbmNhdENUTSh2aWV3cG9ydFRyYW5zZm9y
bSgpKTsKLSAgICAKKwogICAgIFJlbmRlckNvbnRhaW5lcjo6cGFpbnQocGFpbnRJbmZvLCAwLCAw
KTsKLSAgICAKKwogICAgIGlmIChmaWx0ZXIpCiAgICAgICAgIGZpbHRlci0+YXBwbHlGaWx0ZXIo
c3Ryb2tlQkJveCk7Ci0gICAgCisKICAgICBpZiAob3BhY2l0eSA8IDEuMGYpCi0gICAgICAgIHBh
aW50SW5mby5wLT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgIAorICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKwogICAgIC8vIHJlc3RvcmUgZHJh
d2luZyBzdGF0ZQogICAgIGlmIChzaG91bGRQb3BDb250ZXh0KSB7CiAgICAgICAgIGRldmljZS0+
cG9wQ29udGV4dCgpOwogICAgICAgICBkZWxldGUgZGV2aWNlQ29udGV4dDsKICAgICB9IGVsc2UK
LSAgICAgICAgcGFpbnRJbmZvLnAtPnJlc3RvcmUoKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnJlc3RvcmUoKTsKIH0KIAogRmxvYXRSZWN0IFJlbmRlclNWR0NvbnRhaW5lcjo6dmlld3Bv
cnQoKSBjb25zdApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHJl
dmlzaW9uIDE3NDQ3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1
YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyAmcGFpbnRJbmZvLCBpbnQgcGFyZW50WCwg
aW50IHBhcmVudFkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFy
ZW50WCwgaW50IHBhcmVudFkpOwogICAgIAogICAgIHZpcnR1YWwgSW50UmVjdCBnZXRBYnNvbHV0
ZVJlcGFpbnRSZWN0KCk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHAJ
KHJldmlzaW9uIDE3NDQ3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsMTcgKzEyNCwxNyBAQCB2b2lkIFJlbmRlclNWR0ltYWdl
OjphZGp1c3RSZWN0c0ZvckFzcGVjCiAKIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpCiB7Ci0gICAgaWYgKHBh
aW50SW5mby5wLT5wYWludGluZ0Rpc2FibGVkKCkgfHwgKHBhaW50SW5mby5waGFzZSAhPSBQYWlu
dFBoYXNlRm9yZWdyb3VuZCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTikKKyAg
ICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCAocGFpbnRJbmZv
LnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB8fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkg
PT0gSElEREVOKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgS1JlbmRlcmluZ0RldmljZSog
ZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7CiAgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQq
IGNvbnRleHQgPSBkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCk7CiAgICAgYm9vbCBzaG91bGRQb3BD
b250ZXh0ID0gZmFsc2U7CiAgICAgaWYgKGNvbnRleHQpCi0gICAgICAgIHBhaW50SW5mby5wLT5z
YXZlKCk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAgZWxzZSB7CiAg
ICAgICAgIC8vIE5lZWQgdG8gcHVzaCBhIGRldmljZSBjb250ZXh0IG9uIHRoZSBzdGFjayBpZiBl
bXB0eS4KLSAgICAgICAgY29udGV4dCA9IHBhaW50SW5mby5wLT5jcmVhdGVSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0KCk7CisgICAgICAgIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dC0+Y3JlYXRl
UmVuZGVyaW5nRGV2aWNlQ29udGV4dCgpOwogICAgICAgICBkZXZpY2UtPnB1c2hDb250ZXh0KGNv
bnRleHQpOwogICAgICAgICBzaG91bGRQb3BDb250ZXh0ID0gdHJ1ZTsKICAgICB9CkBAIC0xNDUs
NyArMTQ1LDcgQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBwYQogICAg
IAogICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IEZsb2F0UmVjdCgwLCAwLCB3aWR0aCgpLCBo
ZWlnaHQoKSk7CiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN2Z1N0eWxlID0gc3R5bGUoKS0+
c3ZnU3R5bGUoKTsKLSAgICAgICAgICAgIAorCiAgICAgaWYgKEtDYW52YXNDbGlwcGVyKiBjbGlw
cGVyID0gZ2V0Q2xpcHBlckJ5SWQoZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmNsaXBQYXRoKCkuc3Vi
c3RyaW5nKDEpKSkKICAgICAgICAgY2xpcHBlci0+YXBwbHlDbGlwKGJvdW5kaW5nQm94KTsKIApA
QCAtMTY1LDEzICsxNjUsMTMgQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6cGFpbnQoUGFpbnRJbmZv
JiBwYQogICAgIH0KIAogICAgIFBhaW50SW5mbyBwaShwYWludEluZm8pOwotICAgIHBpLnAgPSBj
LmdldCgpOwotICAgIHBpLnIgPSBhYnNvbHV0ZVRyYW5zZm9ybSgpLmludmVydCgpLm1hcFJlY3Qo
cGFpbnRJbmZvLnIpOworICAgIHBpLmNvbnRleHQgPSBjLmdldCgpOworICAgIHBpLnJlY3QgPSBh
YnNvbHV0ZVRyYW5zZm9ybSgpLmludmVydCgpLm1hcFJlY3QocGFpbnRJbmZvLnJlY3QpOwogCiAg
ICAgaW50IHggPSAwLCB5ID0gMDsKICAgICBpZiAoc2hvdWxkUGFpbnQocGksIHgsIHkpKSB7Ci0g
ICAgICAgIFNWR0ltYWdlRWxlbWVudCAqaW1hZ2VFbHQgPSBzdGF0aWNfY2FzdDxTVkdJbWFnZUVs
ZW1lbnQqPihub2RlKCkpOwotICAgICAgICAKKyAgICAgICAgU1ZHSW1hZ2VFbGVtZW50KiBpbWFn
ZUVsdCA9IHN0YXRpY19jYXN0PFNWR0ltYWdlRWxlbWVudCo+KG5vZGUoKSk7CisKICAgICAgICAg
aWYgKGltYWdlRWx0LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCktPmFsaWduKCkgPT0gU1ZHUHJlc2Vy
dmVBc3BlY3RSYXRpbzo6U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fTk9ORSkKICAgICAgICAgICAg
IFJlbmRlckltYWdlOjpwYWludChwaSwgMCwgMCk7CiAgICAgICAgIGVsc2UgewpAQCAtMTkwLDcg
KzE5MCw3IEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OnBhaW50KFBhaW50SW5mbyYgcGEKIAogICAg
IC8vIHJlc3RvcmUgZHJhd2luZyBzdGF0ZQogICAgIGlmICghc2hvdWxkUG9wQ29udGV4dCkKLSAg
ICAgICAgcGFpbnRJbmZvLnAtPnJlc3RvcmUoKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PnJlc3RvcmUoKTsKICAgICBlbHNlIHsKICAgICAgICAgZGV2aWNlLT5wb3BDb250ZXh0KCk7CiAg
ICAgICAgIGRlbGV0ZSBjb250ZXh0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZH
VGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5j
cHAJKHJldmlzaW9uIDE3NDQ3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExMywxNCArMTEzLDE0IEBAIHZvaWQgUmVuZGVyU1ZHVGV4
dDo6YWJzb2x1dGVSZWN0cyhWZWN0b3IKICAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVj
dChib3hUcmFuc2Zvcm0ubWFwUmVjdChib3hSZWN0KSkpOwogfQogCi12b2lkIFJlbmRlclNWR1Rl
eHQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgX3R4LCBpbnQgX3R5KQordm9pZCBS
ZW5kZXJTVkdUZXh0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkp
CiB7ICAgIAogICAgIEtSZW5kZXJpbmdEZXZpY2UqIGRldmljZSA9IHJlbmRlcmluZ0RldmljZSgp
OwogICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIHBpID0gcGFpbnRJbmZvOwogICAgIE93blB0
cjxHcmFwaGljc0NvbnRleHQ+IGMoZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpLT5jcmVhdGVHcmFw
aGljc0NvbnRleHQoKSk7Ci0gICAgcGkucCA9IGMuZ2V0KCk7Ci0gICAgcGkuciA9IChhYnNvbHV0
ZVRyYW5zZm9ybSgpKS5pbnZlcnQoKS5tYXBSZWN0KHBhaW50SW5mby5yKTsKLSAgICBSZW5kZXJC
bG9jazo6cGFpbnQocGksIF90eCwgX3R5KTsKKyAgICBwaS5jb250ZXh0ID0gYy5nZXQoKTsKKyAg
ICBwaS5yZWN0ID0gKGFic29sdXRlVHJhbnNmb3JtKCkpLmludmVydCgpLm1hcFJlY3QocGFpbnRJ
bmZvLnJlY3QpOworICAgIFJlbmRlckJsb2NrOjpwYWludChwaSwgdHgsIHR5KTsKIH0KIAogRmxv
YXRSZWN0IFJlbmRlclNWR1RleHQ6OnJlbGF0aXZlQkJveChib29sIGluY2x1ZGVTdHJva2UpIGNv
bnN0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5oCShyZXZpc2lvbiAxNzQ0NykKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
MTYgKzMxLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU1ZHVGV4dEVsZW1lbnQ7
CiAKLWNsYXNzIFJlbmRlclNWR1RleHQgOiBwdWJsaWMgUmVuZGVyQmxvY2sKLXsKK2NsYXNzIFJl
bmRlclNWR1RleHQgOiBwdWJsaWMgUmVuZGVyQmxvY2sgewogcHVibGljOgogICAgIFJlbmRlclNW
R1RleHQoU1ZHVGV4dEVsZW1lbnQqIG5vZGUpOwogCi0gICAgdmlydHVhbCBjb25zdCBjaGFyICpy
ZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1RleHQiOyB9CisgICAgdmlydHVh
bCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1RleHQi
OyB9CiAgICAgCiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRMb2NhbFRy
YW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkgeyBtX3RyYW5zZm9ybSA9
IHRyYW5zZm9ybTsgfQotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mIGksIGludCBf
dHgsIGludCBfdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgs
IGludCB0eSk7CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KEhpdFRlc3RSZXN1bHQmLCBp
bnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKICAgICB2aXJ0dWFs
IHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CiAg
ICAgdmlydHVhbCB2b2lkIGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3QmIHIsIGJv
b2wgZik7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiAxNzQ0NykK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgwLDIyICszODAsMjIgQEAgdm9pZCBSZW5kZXJUYWJsZTo6c2V0Q2VsbFdpZHRocygpCiAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24gKj4oY2hpbGQpLT5zZXRDZWxs
V2lkdGhzKCk7CiB9CiAKLXZvaWQgUmVuZGVyVGFibGU6OnBhaW50KFBhaW50SW5mbyYgaSwgaW50
IF90eCwgaW50IF90eSkKK3ZvaWQgUmVuZGVyVGFibGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICBfdHggKz0geFBvcygpOwotICAgIF90eSArPSB5
UG9zKCk7CisgICAgdHggKz0geFBvcygpOworICAgIHR5ICs9IHlQb3MoKTsKIAotICAgIFBhaW50
UGhhc2UgcGFpbnRQaGFzZSA9IGkucGhhc2U7Ci0gICAgCi0gICAgaW50IG9zID0gMiptYXhpbWFs
T3V0bGluZVNpemUocGFpbnRQaGFzZSk7Ci0gICAgaWYgKF90eSA+PSBpLnIuYm90dG9tKCkgKyBv
cyB8fCBfdHkgKyBoZWlnaHQoKSA8PSBpLnIueSgpIC0gb3MpCisgICAgUGFpbnRQaGFzZSBwYWlu
dFBoYXNlID0gcGFpbnRJbmZvLnBoYXNlOworCisgICAgaW50IG9zID0gMiAqIG1heGltYWxPdXRs
aW5lU2l6ZShwYWludFBoYXNlKTsKKyAgICBpZiAodHkgPj0gcGFpbnRJbmZvLnJlY3QuYm90dG9t
KCkgKyBvcyB8fCB0eSArIGhlaWdodCgpIDw9IHBhaW50SW5mby5yZWN0LnkoKSAtIG9zKQogICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKF90eCA+PSBpLnIucmlnaHQoKSArIG9zIHx8IF90eCArIHdp
ZHRoKCkgPD0gaS5yLngoKSAtIG9zKQorICAgIGlmICh0eCA+PSBwYWludEluZm8ucmVjdC5yaWdo
dCgpICsgb3MgfHwgdHggKyB3aWR0aCgpIDw9IHBhaW50SW5mby5yZWN0LngoKSAtIG9zKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoKHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFj
a2dyb3VuZCB8fCBwYWludFBoYXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZCkK
ICAgICAgICAgJiYgc2hvdWxkUGFpbnRCYWNrZ3JvdW5kT3JCb3JkZXIoKSAmJiBzdHlsZSgpLT52
aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKLSAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhpLCBf
dHgsIF90eSk7CisgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCB0eCwgdHkp
OwogCiAgICAgLy8gV2UncmUgZG9uZS4gIFdlIGRvbid0IGJvdGhlciBwYWludGluZyBhbnkgY2hp
bGRyZW4uCiAgICAgaWYgKHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCkK
QEAgLTQwNCwxMiArNDA0LDEzIEBAIHZvaWQgUmVuZGVyVGFibGU6OnBhaW50KFBhaW50SW5mbyYg
aSwgaW4KICAgICAvLyBXZSBkb24ndCBwYWludCBvdXIgb3duIGJhY2tncm91bmQsIGJ1dCB3ZSBk
byBsZXQgdGhlIGtpZHMgcGFpbnQgdGhlaXIgYmFja2dyb3VuZHMuCiAgICAgaWYgKHBhaW50UGhh
c2UgPT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kcykKICAgICAgICAgcGFpbnRQaGFz
ZSA9IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZDsKLSAgICBQYWludEluZm8gcGFpbnRJ
bmZvKGkpOwotICAgIHBhaW50SW5mby5waGFzZSA9IHBhaW50UGhhc2U7Ci0gICAgCi0gICAgZm9y
IChSZW5kZXJPYmplY3QgKmNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkKKyAgICBQYWludEluZm8gaW5mbyhwYWludEluZm8pOworICAgIGlu
Zm8ucGhhc2UgPSBwYWludFBoYXNlOworCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0g
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAg
ICAgICBpZiAoIWNoaWxkLT5sYXllcigpICYmIChjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSB8fCBj
aGlsZCA9PSB0Q2FwdGlvbikpCi0gICAgICAgICAgICBjaGlsZC0+cGFpbnQocGFpbnRJbmZvLCBf
dHgsIF90eSk7CisgICAgICAgICAgICBjaGlsZC0+cGFpbnQoaW5mbywgdHgsIHR5KTsKKyAgICB9
CiAKICAgICBpZiAoY29sbGFwc2VCb3JkZXJzKCkgJiYgcGFpbnRQaGFzZSA9PSBQYWludFBoYXNl
Q2hpbGRCbG9ja0JhY2tncm91bmQgJiYgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUp
IHsKICAgICAgICAgLy8gQ29sbGVjdCBhbGwgdGhlIHVuaXF1ZSBib3JkZXIgc3R5bGVzIHRoYXQg
d2Ugd2FudCB0byBwYWludCBpbiBhIHNvcnRlZCBsaXN0LiAgT25jZSB3ZQpAQCAtNDI0LDM5ICs0
MjUsMzkgQEAgdm9pZCBSZW5kZXJUYWJsZTo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbgogICAgICAg
ICAgICAgbV9jdXJyZW50Qm9yZGVyID0gJigqaXQpOwogICAgICAgICAgICAgZm9yIChSZW5kZXJP
YmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKSkKICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkpCi0g
ICAgICAgICAgICAgICAgICAgIGNoaWxkLT5wYWludChwYWludEluZm8sIF90eCwgX3R5KTsKKyAg
ICAgICAgICAgICAgICAgICAgY2hpbGQtPnBhaW50KGluZm8sIHR4LCB0eSk7CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgICAgIAorCiAjaWZkZWYgQk9YX0RFQlVHCi0gICAgb3V0bGluZUJveChpLnAs
IF90eCwgX3R5LCAiYmx1ZSIpOworICAgIG91dGxpbmVCb3gocGFpbnRJbmZvLmNvbnRleHQsIHR4
LCB0eSwgImJsdWUiKTsKICNlbmRpZgogfQogCi12b2lkIFJlbmRlclRhYmxlOjpwYWludEJveERl
Y29yYXRpb25zKFBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSkKK3ZvaWQgUmVuZGVyVGFi
bGU6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50
IHR5KQogewogICAgIGludCB3ID0gd2lkdGgoKTsKICAgICBpbnQgaCA9IGhlaWdodCgpOwotICAg
IAorCiAgICAgLy8gQWNjb3VudCBmb3IgdGhlIGNhcHRpb24uCiAgICAgaWYgKHRDYXB0aW9uKSB7
CiAgICAgICAgIGludCBjYXB0aW9uSGVpZ2h0ID0gKHRDYXB0aW9uLT5oZWlnaHQoKSArIHRDYXB0
aW9uLT5tYXJnaW5Cb3R0b20oKSArICB0Q2FwdGlvbi0+bWFyZ2luVG9wKCkpOwogICAgICAgICBo
IC09IGNhcHRpb25IZWlnaHQ7CiAgICAgICAgIGlmICh0Q2FwdGlvbi0+c3R5bGUoKS0+Y2FwdGlv
blNpZGUoKSAhPSBDQVBCT1RUT00pCi0gICAgICAgICAgICBfdHkgKz0gY2FwdGlvbkhlaWdodDsK
KyAgICAgICAgICAgIHR5ICs9IGNhcHRpb25IZWlnaHQ7CiAgICAgfQogCi0gICAgaW50IG15ID0g
bWF4KF90eSwgaS5yLnkoKSk7CisgICAgaW50IG15ID0gbWF4KHR5LCBwYWludEluZm8ucmVjdC55
KCkpOwogICAgIGludCBtaDsKLSAgICBpZiAoX3R5IDwgaS5yLnkoKSkKLSAgICAgICAgbWg9IG1h
eCgwLCBoIC0gKGkuci55KCkgLSBfdHkpKTsKKyAgICBpZiAodHkgPCBwYWludEluZm8ucmVjdC55
KCkpCisgICAgICAgIG1oPSBtYXgoMCwgaCAtIChwYWludEluZm8ucmVjdC55KCkgLSB0eSkpOwog
ICAgIGVsc2UKLSAgICAgICAgbWggPSBtaW4oaS5yLmhlaWdodCgpLCBoKTsKLSAgICAKLSAgICBw
YWludEJhY2tncm91bmQoaS5wLCBzdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKSwgc3R5bGUoKS0+
YmFja2dyb3VuZExheWVycygpLCBteSwgbWgsIF90eCwgX3R5LCB3LCBoKTsKLSAgICAKKyAgICAg
ICAgbWggPSBtaW4ocGFpbnRJbmZvLnJlY3QuaGVpZ2h0KCksIGgpOworCisgICAgcGFpbnRCYWNr
Z3JvdW5kKHBhaW50SW5mby5jb250ZXh0LCBzdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKSwgc3R5
bGUoKS0+YmFja2dyb3VuZExheWVycygpLCBteSwgbWgsIHR4LCB0eSwgdywgaCk7CisKICAgICBp
ZiAoc3R5bGUoKS0+aGFzQm9yZGVyKCkgJiYgIWNvbGxhcHNlQm9yZGVycygpKQotICAgICAgICBw
YWludEJvcmRlcihpLnAsIF90eCwgX3R5LCB3LCBoLCBzdHlsZSgpKTsKKyAgICAgICAgcGFpbnRC
b3JkZXIocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgdywgaCwgc3R5bGUoKSk7CiB9CiAKIHZv
aWQgUmVuZGVyVGFibGU6OmNhbGNNaW5NYXhXaWR0aCgpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlLmgJKHJldmlzaW9uIDE3NDQ3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGludCBvdmVyZmxvd0hlaWdodChib29sIGluY2x1ZGVJbnRlcmlvciA9IHRydWUpIGNvbnN0IHsg
cmV0dXJuIGhlaWdodCgpOyB9CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVj
dCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwotICAgIHZpcnR1YWwgdm9pZCBw
YWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGludCBfdHgsIGludCBfdHkpOworICAgIHZp
cnR1YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5
KTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNhbGNNaW5N
YXhXaWR0aCgpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHJl
dmlzaW9uIDE3NDQ3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTM3LDI4ICs1MzcsMjkgQEAgc3RhdGljIHZvaWQgb3V0bGluZUJv
eChHcmFwaGljc0NvbnRleHQqIAogfQogI2VuZGlmCiAKLXZvaWQgUmVuZGVyVGFibGVDZWxsOjpw
YWludChQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpCit2b2lkIFJlbmRlclRhYmxlQ2Vs
bDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogewotICAgIF90
eCArPSBtX3g7Ci0gICAgX3R5ICs9IG1feTsKKyAgICB0eCArPSBtX3g7CisgICAgdHkgKz0gbV95
OwogCiAgICAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBkbyBhbnl0aGluZyBhdCBhbGwuLi4KLSAg
ICBpbnQgb3MgPSAyKm1heGltYWxPdXRsaW5lU2l6ZShpLnBoYXNlKTsKKyAgICBpbnQgb3MgPSAy
ICogbWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSk7CiAKLSAgICBpZiAoaS5waGFz
ZSA9PSBQYWludFBoYXNlQ29sbGFwc2VkVGFibGVCb3JkZXJzICYmIHN0eWxlKCktPnZpc2liaWxp
dHkoKSA9PSBWSVNJQkxFKSB7Ci0gICAgICAgIGlmIChfdHkgLSB0YWJsZSgpLT5vdXRlckJvcmRl
clRvcCgpID49IGkuci5ib3R0b20oKSArIG9zIHx8IF90eSArIF90b3BFeHRyYSArIG1faGVpZ2h0
ICsgX2JvdHRvbUV4dHJhICsgdGFibGUoKS0+b3V0ZXJCb3JkZXJCb3R0b20oKSA8PSBpLnIueSgp
IC0gb3MpCisgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlQ29sbGFwc2VkVGFi
bGVCb3JkZXJzICYmIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKSB7CisgICAgICAg
IGlmICh0eSAtIHRhYmxlKCktPm91dGVyQm9yZGVyVG9wKCkgPj0gcGFpbnRJbmZvLnJlY3QuYm90
dG9tKCkgKyBvcworICAgICAgICAgICAgICAgIHx8IHR5ICsgX3RvcEV4dHJhICsgbV9oZWlnaHQg
KyBfYm90dG9tRXh0cmEgKyB0YWJsZSgpLT5vdXRlckJvcmRlckJvdHRvbSgpIDw9IHBhaW50SW5m
by5yZWN0LnkoKSAtIG9zKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpbnQgdyA9IHdp
ZHRoKCk7CiAgICAgICAgIGludCBoID0gaGVpZ2h0KCkgKyBib3JkZXJUb3BFeHRyYSgpICsgYm9y
ZGVyQm90dG9tRXh0cmEoKTsKLSAgICAgICAgcGFpbnRDb2xsYXBzZWRCb3JkZXIoaS5wLCBfdHgs
IF90eSwgdywgaCk7CisgICAgICAgIHBhaW50Q29sbGFwc2VkQm9yZGVyKHBhaW50SW5mby5jb250
ZXh0LCB0eCwgdHksIHcsIGgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChfdHkgPj0gaS5y
LmJvdHRvbSgpICsgb3MgfHwgX3R5ICsgX3RvcEV4dHJhICsgbV9oZWlnaHQgKyBfYm90dG9tRXh0
cmEgPD0gaS5yLnkoKSAtIG9zKQorICAgICAgICBpZiAodHkgPj0gcGFpbnRJbmZvLnJlY3QuYm90
dG9tKCkgKyBvcyB8fCB0eSArIF90b3BFeHRyYSArIG1faGVpZ2h0ICsgX2JvdHRvbUV4dHJhIDw9
IHBhaW50SW5mby5yZWN0LnkoKSAtIG9zKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBS
ZW5kZXJCbG9jazo6cGFpbnRPYmplY3QoaSwgX3R4LCBfdHkgKyBfdG9wRXh0cmEpOworICAgICAg
ICBSZW5kZXJCbG9jazo6cGFpbnRPYmplY3QocGFpbnRJbmZvLCB0eCwgdHkgKyBfdG9wRXh0cmEp
OwogICAgIH0KIAogI2lmZGVmIEJPWF9ERUJVRwotICAgIDo6b3V0bGluZUJveCggaS5wLCBfdHgs
IF90eSwgd2lkdGgoKSwgaGVpZ2h0KCkgKyBib3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9t
RXh0cmEoKSk7CisgICAgOjpvdXRsaW5lQm94KHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHdp
ZHRoKCksIGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCkp
OwogI2VuZGlmCiB9CiAKQEAgLTcwMCw3ICs3MDEsNyBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6
cGFpbnRDb2xsYXBzZWRCb3JkCiAgICAgfQogfQogCi12b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFp
bnRCYWNrZ3JvdW5kc0JlaGluZENlbGwoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5LCBS
ZW5kZXJPYmplY3QqIGJhY2tncm91bmRPYmplY3QpCit2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFp
bnRCYWNrZ3JvdW5kc0JlaGluZENlbGwoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50
IHR5LCBSZW5kZXJPYmplY3QqIGJhY2tncm91bmRPYmplY3QpCiB7CiAgICAgaWYgKCFiYWNrZ3Jv
dW5kT2JqZWN0KQogICAgICAgICByZXR1cm47CkBAIC03MTAsMTggKzcxMSwxOCBAQCB2b2lkIFJl
bmRlclRhYmxlQ2VsbDo6cGFpbnRCYWNrZ3JvdW5kc0JlCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChiYWNrZ3JvdW5kT2JqZWN0ICE9IHRoaXMpIHsKLSAgICAgICAgX3R4ICs9IG1feDsKLSAg
ICAgICAgX3R5ICs9IG1feSArIF90b3BFeHRyYTsKKyAgICAgICAgdHggKz0gbV94OworICAgICAg
ICB0eSArPSBtX3kgKyBfdG9wRXh0cmE7CiAgICAgfQogCiAgICAgaW50IHcgPSB3aWR0aCgpOwog
ICAgIGludCBoID0gaGVpZ2h0KCkgKyBib3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0
cmEoKTsKLSAgICBfdHkgLT0gYm9yZGVyVG9wRXh0cmEoKTsKLSAgICAKLSAgICBpbnQgbXkgPSBt
YXgoX3R5LCBpLnIueSgpKTsKLSAgICBpbnQgZW5kID0gbWluKGkuci5ib3R0b20oKSwgX3R5ICsg
aCk7CisgICAgdHkgLT0gYm9yZGVyVG9wRXh0cmEoKTsKKworICAgIGludCBteSA9IG1heCh0eSwg
cGFpbnRJbmZvLnJlY3QueSgpKTsKKyAgICBpbnQgZW5kID0gbWluKHBhaW50SW5mby5yZWN0LmJv
dHRvbSgpLCB0eSArIGgpOwogICAgIGludCBtaCA9IGVuZCAtIG15OwotICAgIAorCiAgICAgQ29s
b3IgYyA9IGJhY2tncm91bmRPYmplY3QtPnN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpOwogICAg
IGNvbnN0IEJhY2tncm91bmRMYXllciogYmdMYXllciA9IGJhY2tncm91bmRPYmplY3QtPnN0eWxl
KCktPmJhY2tncm91bmRMYXllcnMoKTsKIApAQCAtNzMwLDMyICs3MzEsMzIgQEAgdm9pZCBSZW5k
ZXJUYWJsZUNlbGw6OnBhaW50QmFja2dyb3VuZHNCZQogICAgICAgICAvLyBvbiB0b3Agb2YgdGhl
IGJvcmRlcnMgb3RoZXJ3aXNlLiAgVGhpcyBvbmx5IG1hdHRlcnMgZm9yIGNlbGxzIGFuZCByb3dz
LgogICAgICAgICBib29sIGhhc0xheWVyID0gYmFja2dyb3VuZE9iamVjdC0+bGF5ZXIoKSAmJiAo
YmFja2dyb3VuZE9iamVjdCA9PSB0aGlzIHx8IGJhY2tncm91bmRPYmplY3QgPT0gcGFyZW50KCkp
OwogICAgICAgICBpZiAoaGFzTGF5ZXIgJiYgdGFibGVFbHQtPmNvbGxhcHNlQm9yZGVycygpKSB7
Ci0gICAgICAgICAgICBJbnRSZWN0IGNsaXBSZWN0KF90eCArIGJvcmRlckxlZnQoKSwgX3R5ICsg
Ym9yZGVyVG9wKCksCisgICAgICAgICAgICBJbnRSZWN0IGNsaXBSZWN0KHR4ICsgYm9yZGVyTGVm
dCgpLCB0eSArIGJvcmRlclRvcCgpLAogICAgICAgICAgICAgICAgIHcgLSBib3JkZXJMZWZ0KCkg
LSBib3JkZXJSaWdodCgpLCBoIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSk7Ci0gICAg
ICAgICAgICBpLnAtPnNhdmUoKTsKLSAgICAgICAgICAgIGkucC0+Y2xpcChjbGlwUmVjdCk7Cisg
ICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgICAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmNsaXAoY2xpcFJlY3QpOwogICAgICAgICB9Ci0gICAgICAgIHBhaW50QmFj
a2dyb3VuZChpLnAsIGMsIGJnTGF5ZXIsIG15LCBtaCwgX3R4LCBfdHksIHcsIGgpOworICAgICAg
ICBwYWludEJhY2tncm91bmQocGFpbnRJbmZvLmNvbnRleHQsIGMsIGJnTGF5ZXIsIG15LCBtaCwg
dHgsIHR5LCB3LCBoKTsKICAgICAgICAgaWYgKGhhc0xheWVyICYmIHRhYmxlRWx0LT5jb2xsYXBz
ZUJvcmRlcnMoKSkKLSAgICAgICAgICAgIGkucC0+cmVzdG9yZSgpOworICAgICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVD
ZWxsOjpwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSkK
K3ZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKICAgICBSZW5kZXJUYWJsZSogdGFibGVFbHQgPSB0
YWJsZSgpOwogICAgIGlmICghdGFibGVFbHQtPmNvbGxhcHNlQm9yZGVycygpICYmIHN0eWxlKCkt
PmVtcHR5Q2VsbHMoKSA9PSBISURFICYmICFmaXJzdENoaWxkKCkpCiAgICAgICAgIHJldHVybjsK
LSAKKwogICAgIC8vIFBhaW50IG91ciBjZWxsIGJhY2tncm91bmQuCi0gICAgcGFpbnRCYWNrZ3Jv
dW5kc0JlaGluZENlbGwoaSwgX3R4LCBfdHksIHRoaXMpOworICAgIHBhaW50QmFja2dyb3VuZHNC
ZWhpbmRDZWxsKHBhaW50SW5mbywgdHgsIHR5LCB0aGlzKTsKIAogICAgIGludCB3ID0gd2lkdGgo
KTsKICAgICBpbnQgaCA9IGhlaWdodCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRv
bUV4dHJhKCk7Ci0gICAgX3R5IC09IGJvcmRlclRvcEV4dHJhKCk7CisgICAgdHkgLT0gYm9yZGVy
VG9wRXh0cmEoKTsKIAogICAgIGlmIChzdHlsZSgpLT5oYXNCb3JkZXIoKSAmJiAhdGFibGVFbHQt
PmNvbGxhcHNlQm9yZGVycygpKQotICAgICAgICBwYWludEJvcmRlcihpLnAsIF90eCwgX3R5LCB3
LCBoLCBzdHlsZSgpKTsKKyAgICAgICAgcGFpbnRCb3JkZXIocGFpbnRJbmZvLmNvbnRleHQsIHR4
LCB0eSwgdywgaCwgc3R5bGUoKSk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZUNlbGwuaAkocmV2aXNpb24gMTc0NDcpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZUNlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtODQsOSArODQsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRDZWxsVG9wRXh0cmEoaW50IHApIHsgX3RvcEV4dHJhID0gcDsg
fQogICAgIHZvaWQgc2V0Q2VsbEJvdHRvbUV4dHJhKGludCBwKSB7IF9ib3R0b21FeHRyYSA9IHA7
IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mIGksIGludCB0eCwgaW50IHR5
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwog
Ci0gICAgdm9pZCBwYWludENvbGxhcHNlZEJvcmRlcihHcmFwaGljc0NvbnRleHQqIHAsIGludCB4
LCBpbnQgeSwgaW50IHcsIGludCBoKTsKKyAgICB2b2lkIHBhaW50Q29sbGFwc2VkQm9yZGVyKEdy
YXBoaWNzQ29udGV4dCosIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoKTsKICAgICAKICAgICAv
LyBsaWUgYWJvdXQgcG9zaXRpb24gdG8gb3V0c2lkZSBvYnNlcnZlcnMKICAgICB2aXJ0dWFsIGlu
dCB5UG9zKCkgY29uc3QgeyByZXR1cm4gbV95ICsgX3RvcEV4dHJhOyB9CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCShyZXZpc2lvbiAxNzQ0NykKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3
IEBAIGJvb2wgUmVuZGVyVGFibGVSb3c6Om5vZGVBdFBvaW50KEhpdFRlc3QKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVSb3c6OnBhaW50KFBhaW50SW5mbyYgaSwgaW50
IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlclRhYmxlUm93OjpwYWludChQYWludEluZm8mIHBhaW50
SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgYXNzZXJ0KG1fbGF5ZXIpOwogICAgIGlmICgh
bV9sYXllcikKQEAgLTE2NSwxNCArMTY1LDE0IEBAIHZvaWQgUmVuZGVyVGFibGVSb3c6OnBhaW50
KFBhaW50SW5mbyYgaSwKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChj
aGlsZC0+aXNUYWJsZUNlbGwoKSkgewogICAgICAgICAgICAgLy8gUGFpbnQgdGhlIHJvdyBiYWNr
Z3JvdW5kIGJlaGluZCB0aGUgY2VsbC4KLSAgICAgICAgICAgIGlmIChpLnBoYXNlID09IFBhaW50
UGhhc2VCbG9ja0JhY2tncm91bmQgfHwgaS5waGFzZSA9PSBQYWludFBoYXNlQ2hpbGRCbG9ja0Jh
Y2tncm91bmQpIHsKKyAgICAgICAgICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZUJsb2NrQmFja2dyb3VuZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkQmxv
Y2tCYWNrZ3JvdW5kKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsKiBjZWxsID0g
c3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsKj4oY2hpbGQpOwotICAgICAgICAgICAgICAgIGNl
bGwtPnBhaW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKGksIHR4LCB0eSwgdGhpcyk7CisgICAgICAg
ICAgICAgICAgY2VsbC0+cGFpbnRCYWNrZ3JvdW5kc0JlaGluZENlbGwocGFpbnRJbmZvLCB0eCwg
dHksIHRoaXMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFjaGlsZC0+bGF5ZXIo
KSkKLSAgICAgICAgICAgICAgICBjaGlsZC0+cGFpbnQoaSwgdHgsIHR5KTsKKyAgICAgICAgICAg
ICAgICBjaGlsZC0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOwogICAgICAgICB9CiAgICAgfQog
fQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVJvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlUm93LmgJKHJldmlzaW9uIDE3NDQ3KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVSb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgLy8g
VGhlIG9ubHkgdGltZSByb3dzIGdldCBhIGxheWVyIGlzIHdoZW4gdGhleSBoYXZlIHRyYW5zcGFy
ZW5jeS4KICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpIHsgcmV0dXJuIGlzVHJhbnNw
YXJlbnQoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKTsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBhaW50
KFBhaW50SW5mbyYgaSwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAKICAgICBSZW5kZXJUYWJsZSogdGFibGUoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZSo+KHBhcmVudCgpLT5wYXJlbnQo
KSk7IH0KICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24oKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihwYXJlbnQoKSk7IH0KSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkocmV2aXNpb24gMTc0NDcpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MjksNyArODI5LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnJlY2FsY091dGVyQm9y
ZAogfQogCiAKLXZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludChQYWludEluZm8mIGksIGlu
dCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50KFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKICAgICB1bnNpZ25lZCBpbnQgdG90YWxSb3dz
ID0gZ3JpZFJvd3M7CiAgICAgdW5zaWduZWQgaW50IHRvdGFsQ29scyA9IHRhYmxlKCktPmNvbHVt
bnMuc2l6ZSgpOwpAQCAtODQyLDI0ICs4NDIsMjYgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246
OnBhaW50KFBhaW50SW5mbwogCiAgICAgLy8gY2hlY2sgd2hpY2ggcm93cyBhbmQgY29scyBhcmUg
dmlzaWJsZSBhbmQgb25seSBwYWludCB0aGVzZQogICAgIC8vICMjIyBmaXhtZTogY291bGQgdXNl
IGEgYmluYXJ5IHNlYXJjaCBoZXJlCi0gICAgUGFpbnRQaGFzZSBwYWludFBoYXNlID0gaS5waGFz
ZTsKLSAgICBpbnQgeCA9IGkuci54KCk7Ci0gICAgaW50IHkgPSBpLnIueSgpOwotICAgIGludCB3
ID0gaS5yLndpZHRoKCk7Ci0gICAgaW50IGggPSBpLnIuaGVpZ2h0KCk7CisgICAgUGFpbnRQaGFz
ZSBwYWludFBoYXNlID0gcGFpbnRJbmZvLnBoYXNlOworICAgIGludCB4ID0gcGFpbnRJbmZvLnJl
Y3QueCgpOworICAgIGludCB5ID0gcGFpbnRJbmZvLnJlY3QueSgpOworICAgIGludCB3ID0gcGFp
bnRJbmZvLnJlY3Qud2lkdGgoKTsKKyAgICBpbnQgaCA9IHBhaW50SW5mby5yZWN0LmhlaWdodCgp
OwogCiAgICAgaW50IG9zID0gMiAqIG1heGltYWxPdXRsaW5lU2l6ZShwYWludFBoYXNlKTsKICAg
ICB1bnNpZ25lZCBpbnQgc3RhcnRyb3cgPSAwOwogICAgIHVuc2lnbmVkIGludCBlbmRyb3cgPSB0
b3RhbFJvd3M7Ci0gICAgZm9yICg7IHN0YXJ0cm93IDwgdG90YWxSb3dzOyBzdGFydHJvdysrKQor
ICAgIGZvciAoOyBzdGFydHJvdyA8IHRvdGFsUm93czsgc3RhcnRyb3crKykgewogICAgICAgICBp
ZiAodHkgKyByb3dQb3Nbc3RhcnRyb3crMV0gPj0geSAtIG9zKQogICAgICAgICAgICAgYnJlYWs7
CisgICAgfQogICAgIGlmIChzdGFydHJvdyA9PSB0b3RhbFJvd3MgJiYgdHkgKyByb3dQb3NbdG90
YWxSb3dzXSArIHRhYmxlKCktPm91dGVyQm9yZGVyQm90dG9tKCkgPj0geSAtIG9zKQogICAgICAg
ICBzdGFydHJvdy0tOwogCi0gICAgZm9yICg7IGVuZHJvdyA+IDA7IGVuZHJvdy0tKQotICAgICAg
ICBpZiAoIHR5ICsgcm93UG9zW2VuZHJvdy0xXSA8PSB5ICsgaCArIG9zKQorICAgIGZvciAoOyBl
bmRyb3cgPiAwOyBlbmRyb3ctLSkgeworICAgICAgICBpZiAodHkgKyByb3dQb3NbZW5kcm93LTFd
IDw9IHkgKyBoICsgb3MpCiAgICAgICAgICAgICBicmVhazsKKyAgICB9CiAgICAgaWYgKGVuZHJv
dyA9PSAwICYmIHR5ICsgcm93UG9zWzBdIC0gdGFibGUoKS0+b3V0ZXJCb3JkZXJUb3AoKSA8PSB5
ICsgaCArIG9zKQogICAgICAgICBlbmRyb3crKzsKIApAQCAtODcyLDcgKzg3NCw3IEBAIHZvaWQg
UmVuZGVyVGFibGVTZWN0aW9uOjpwYWludChQYWludEluZm8KICAgICAgICAgfQogICAgICAgICBp
ZiAoc3RhcnRjb2wgPT0gdG90YWxDb2xzICYmIHR4ICsgdGFibGUoKS0+Y29sdW1uUG9zW3RvdGFs
Q29sc10gKyB0YWJsZSgpLT5vdXRlckJvcmRlclJpZ2h0KCkgPj0geCAtIG9zKQogICAgICAgICAg
ICAgc3RhcnRjb2wtLTsKLSAgICAgICAgCisKICAgICAgICAgZm9yICg7IGVuZGNvbCA+IDA7IGVu
ZGNvbC0tKSB7CiAgICAgICAgICAgICBpZiAodHggKyB0YWJsZSgpLT5jb2x1bW5Qb3NbZW5kY29s
IC0gMV0gPD0geCArIHcgKyBvcykKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTg5MCwxMiAr
ODkyLDEyIEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludChQYWludEluZm8KICAgICAg
ICAgICAgICAgICBjLS07CiAgICAgICAgICAgICBmb3IgKDsgYyA8IGVuZGNvbDsgYysrKSB7CiAg
ICAgICAgICAgICAgICAgQ2VsbFN0cnVjdCBjdXJyZW50ID0gY2VsbEF0KHIsIGMpOwotICAgICAg
ICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCAqY2VsbCA9IGN1cnJlbnQuY2VsbDsKKyAgICAgICAg
ICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBjdXJyZW50LmNlbGw7CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIENlbGxzIG11c3QgYWx3YXlzIHBhaW50IGlu
IHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFwcGVhciB0YWtpbmcgaW50byBhY2NvdW50CiAgICAg
ICAgICAgICAgICAgLy8gdGhlaXIgdXBwZXIgbGVmdCBvcmlnaW5hdGluZyByb3cvY29sdW1uLiAg
Rm9yIGNlbGxzIHdpdGggcm93c3BhbnMsIGF2b2lkIHJlcGFpbnRpbmcKICAgICAgICAgICAgICAg
ICAvLyBpZiB3ZSd2ZSBhbHJlYWR5IHNlZW4gdGhlIGNlbGwuCi0gICAgICAgICAgICAgICAgaWYg
KCFjZWxsIHx8IChyID4gc3RhcnRyb3cgJiYgKGNlbGxBdChyLTEsIGMpLmNlbGwgPT0gY2VsbCkp
KQorICAgICAgICAgICAgICAgIGlmICghY2VsbCB8fCAociA+IHN0YXJ0cm93ICYmIChjZWxsQXQo
ciAtIDEsIGMpLmNlbGwgPT0gY2VsbCkpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
IAogICAgICAgICAgICAgICAgIGlmIChwYWludFBoYXNlID09IFBhaW50UGhhc2VCbG9ja0JhY2tn
cm91bmQgfHwgcGFpbnRQaGFzZSA9PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmQpIHsK
QEAgLTkwOSwyNiArOTExLDI2IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludChQYWlu
dEluZm8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xHcm91cCA9IGNvbC0+cGFyZW50
KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiByb3cgPSBjZWxsLT5wYXJlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAg
ICAgICAgICAgICAgICAgLy8gQ29sdW1uIGdyb3VwcyBhbmQgY29sdW1ucyBmaXJzdC4KICAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IENvbHVtbnMgYW5kIGNvbHVtbiBncm91cHMgZG8gbm90
IGN1cnJlbnRseSBzdXBwb3J0IG9wYWNpdHksIGFuZCB0aGV5IGFyZSBiZWluZyBwYWludGVkICJ0
b28gbGF0ZSIgaW4KICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHN0YWNrLCBzaW5jZSB3ZSBo
YXZlIGFscmVhZHkgb3BlbmVkIGEgdHJhbnNwYXJlbmN5IGxheWVyIChwb3RlbnRpYWxseSkgZm9y
IHRoZSB0YWJsZSByb3cgZ3JvdXAuCiAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3
ZSBkZWxpYmVyYXRlbHkgaWdub3JlIHdoZXRoZXIgb3Igbm90IHRoZSBjZWxsIGhhcyBhIGxheWVy
LCBzaW5jZSB0aGVzZSBiYWNrZ3JvdW5kcyBwYWludCAiYmVoaW5kIiB0aGUKICAgICAgICAgICAg
ICAgICAgICAgLy8gY2VsbC4KLSAgICAgICAgICAgICAgICAgICAgY2VsbC0+cGFpbnRCYWNrZ3Jv
dW5kc0JlaGluZENlbGwoaSwgdHgsIHR5LCBjb2xHcm91cCk7Ci0gICAgICAgICAgICAgICAgICAg
IGNlbGwtPnBhaW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKGksIHR4LCB0eSwgY29sKTsKLSAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGNlbGwtPnBhaW50QmFja2dyb3Vu
ZHNCZWhpbmRDZWxsKHBhaW50SW5mbywgdHgsIHR5LCBjb2xHcm91cCk7CisgICAgICAgICAgICAg
ICAgICAgIGNlbGwtPnBhaW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKHBhaW50SW5mbywgdHgsIHR5
LCBjb2wpOworCiAgICAgICAgICAgICAgICAgICAgIC8vIFBhaW50IHRoZSByb3cgZ3JvdXAgbmV4
dC4KLSAgICAgICAgICAgICAgICAgICAgY2VsbC0+cGFpbnRCYWNrZ3JvdW5kc0JlaGluZENlbGwo
aSwgdHgsIHR5LCB0aGlzKTsKLSAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGNlbGwtPnBhaW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKHBhaW50SW5mbywgdHgsIHR5LCB0
aGlzKTsKKwogICAgICAgICAgICAgICAgICAgICAvLyBQYWludCB0aGUgcm93IG5leHQsIGJ1dCBv
bmx5IGlmIGl0IGRvZXNuJ3QgaGF2ZSBhIGxheWVyLiAgSWYgYSByb3cgaGFzIGEgbGF5ZXIsIGl0
IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yCiAgICAgICAgICAgICAgICAgICAgIC8vIHBhaW50aW5n
IHRoZSByb3cgYmFja2dyb3VuZCBmb3IgdGhlIGNlbGwuCiAgICAgICAgICAgICAgICAgICAgIGlm
ICghcm93LT5sYXllcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC0+cGFpbnRCYWNr
Z3JvdW5kc0JlaGluZENlbGwoaSwgdHgsIHR5LCByb3cpOworICAgICAgICAgICAgICAgICAgICAg
ICAgY2VsbC0+cGFpbnRCYWNrZ3JvdW5kc0JlaGluZENlbGwocGFpbnRJbmZvLCB0eCwgdHksIHJv
dyk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKCghY2VsbC0+bGF5
ZXIoKSAmJiAhY2VsbC0+cGFyZW50KCktPmxheWVyKCkpIHx8IGkucGhhc2UgPT0gUGFpbnRQaGFz
ZUNvbGxhcHNlZFRhYmxlQm9yZGVycykKLSAgICAgICAgICAgICAgICAgICAgY2VsbC0+cGFpbnQo
aSwgdHgsIHR5KTsKKyAgICAgICAgICAgICAgICBpZiAoKCFjZWxsLT5sYXllcigpICYmICFjZWxs
LT5wYXJlbnQoKS0+bGF5ZXIoKSkgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VDb2xs
YXBzZWRUYWJsZUJvcmRlcnMpCisgICAgICAgICAgICAgICAgICAgIGNlbGwtPnBhaW50KHBhaW50
SW5mbywgdHgsIHR5KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCShyZXZpc2lvbiAxNzQ0NykKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05
OCwxMyArOTgsMTQgQEAgcHVibGljOgogICAgIGludCBvdXRlckJvcmRlckxlZnQoKSBjb25zdCB7
IHJldHVybiBtX291dGVyQm9yZGVyTGVmdDsgfQogICAgIGludCBvdXRlckJvcmRlclJpZ2h0KCkg
Y29uc3QgeyByZXR1cm4gbV9vdXRlckJvcmRlclJpZ2h0OyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2b2lkIHBh
aW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKIAogICAgIGludCBudW1Sb3dzKCkgY29u
c3QgeyByZXR1cm4gZ3JpZFJvd3M7IH0KICAgICBpbnQgbnVtQ29sdW1ucygpIGNvbnN0OwotICAg
IGludCBnZXRCYXNlbGluZShpbnQgcm93KSB7cmV0dXJuIGdyaWRbcm93XS5iYXNlTGluZTt9Cisg
ICAgaW50IGdldEJhc2VsaW5lKGludCByb3cpIHsgcmV0dXJuIGdyaWRbcm93XS5iYXNlTGluZTsg
fQogCi0gICAgdm9pZCBzZXROZWVkQ2VsbFJlY2FsYygpIHsKKyAgICB2b2lkIHNldE5lZWRDZWxs
UmVjYWxjKCkKKyAgICB7CiAgICAgICAgIG5lZWRDZWxsUmVjYWxjID0gdHJ1ZTsKICAgICAgICAg
dGFibGUoKS0+c2V0TmVlZFNlY3Rpb25SZWNhbGMoKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5oCShyZXZpc2lvbiAxNzQ0NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTMgKzUxLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgaXNUZXh0RnJhZ21lbnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4gb3JpZ2luYWxTdHJpbmcoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyVGV4dCI7IH0KKyAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVy
VGV4dCI7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSAqc3R5bGUp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSopOwogCi0gICAgdm9pZCBl
eHRyYWN0VGV4dEJveChJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94KTsKLSAgICB2b2lkIGF0dGFjaFRl
eHRCb3goSW5saW5lVGV4dEJveCogdGV4dEJveCk7Ci0gICAgdm9pZCByZW1vdmVUZXh0Qm94KElu
bGluZVRleHRCb3gqIHRleHRCb3gpOworICAgIHZvaWQgZXh0cmFjdFRleHRCb3goSW5saW5lVGV4
dEJveCopOworICAgIHZvaWQgYXR0YWNoVGV4dEJveChJbmxpbmVUZXh0Qm94Kik7CisgICAgdm9p
ZCByZW1vdmVUZXh0Qm94KElubGluZVRleHRCb3gqKTsKICAgICB2b2lkIGRlbGV0ZVRleHRCb3hl
cygpOwogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CiAgICAgCkBAIC02Nyw3ICs2Nyw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIElubGluZUJveCogY3JlYXRlSW5saW5lQm94KGJvb2wsYm9v
bCwgYm9vbCBpc09ubHlSdW4gPSBmYWxzZSk7CiAgICAgdmlydHVhbCB2b2lkIGRpcnR5TGluZUJv
eGVzKGJvb2wgZnVsbExheW91dCwgYm9vbCBpc1Jvb3RJbmxpbmVCb3ggPSBmYWxzZSk7CiAgICAg
Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYgaSwgaW50IHR4LCBpbnQgdHkpIHsg
YXNzZXJ0KGZhbHNlKTsgfQorICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQg
dHgsIGludCB0eSkgeyBhc3NlcnQoZmFsc2UpOyB9CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgp
IHsgYXNzZXJ0KGZhbHNlKTsgfQogCiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KEhpdFRl
c3RSZXN1bHQmLCBpbnQsIGludCwgaW50LCBpbnQsIEhpdFRlc3RBY3Rpb24pIHsgYXNzZXJ0KGZh
bHNlKTsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xMDQsNyArMTA0LDcgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBtaW5XLCBpbnQmIG1heFcsIGJvb2wm
IHN0cmlwRnJvbnRTcGFjZXMpOwogICAgIAogICAgIGJvb2wgY29udGFpbnNPbmx5V2hpdGVzcGFj
ZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4pIGNvbnN0OwotICAgIAorCiAgICAgLy8gcmV0
dXJucyB0aGUgbWluaW11bSB4IHBvc2l0aW9uIG9mIGFsbCBydW5zIHJlbGF0aXZlIHRvIHRoZSBw
YXJlbnQuCiAgICAgLy8gZGVmYXVsdHMgdG8gMC4KICAgICBpbnQgbWluWFBvcygpIGNvbnN0OwpA
QCAtMTEzLDcgKzExMyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCB5UG9zKCkgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIGNvbnN0IEZvbnQmIGZvbnQoKTsKLSAgICB2aXJ0dWFsIHNob3J0IHZl
cnRpY2FsUG9zaXRpb25IaW50KCBib29sIGZpcnN0TGluZSApIGNvbnN0OworICAgIHZpcnR1YWwg
c2hvcnQgdmVydGljYWxQb3NpdGlvbkhpbnQoYm9vbCBmaXJzdExpbmUpIGNvbnN0OwogCiAgICAg
dm9pZCBzZXRUZXh0KFN0cmluZ0ltcGwqLCBib29sIGZvcmNlID0gZmFsc2UpOwogICAgIHZvaWQg
c2V0VGV4dFdpdGhPZmZzZXQoU3RyaW5nSW1wbCosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuLCBib29sIGZvcmNlID0gZmFsc2UpOwpAQCAtMTIyLDggKzEyMiw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9zZWxlY3Rpb25TdGF0ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShT
ZWxlY3Rpb25TdGF0ZSBzKTsKICAgICB2aXJ0dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdCgpOwot
ICAgIHZpcnR1YWwgSW50UmVjdCBjYXJldFJlY3QoaW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmlu
aXR5LCBpbnQgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDApOwotICAgIHZvaWQgcG9zT2ZDaGFy
KGludCBjaCwgaW50ICZ4LCBpbnQgJnkpOworICAgIHZpcnR1YWwgSW50UmVjdCBjYXJldFJlY3Qo
aW50IG9mZnNldCwgRUFmZmluaXR5LCBpbnQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDApOwor
ICAgIHZvaWQgcG9zT2ZDaGFyKGludCBjaCwgaW50JiB4LCBpbnQmIHkpOwogCiAgICAgdmlydHVh
bCBpbnQgbWFyZ2luTGVmdCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPm1hcmdpbkxlZnQoKS5j
YWxjTWluVmFsdWUoMCk7IH0KICAgICB2aXJ0dWFsIGludCBtYXJnaW5SaWdodCgpIGNvbnN0IHsg
cmV0dXJuIHN0eWxlKCktPm1hcmdpblJpZ2h0KCkuY2FsY01pblZhbHVlKDApOyB9CkBAIC0xMzIs
MTUgKzEzMiwxNSBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBGb250KiBmb250KGJvb2wgZmlyc3RM
aW5lKSBjb25zdDsKIAotICAgIFRleHQgKmVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxUZXh0Kj4oUmVuZGVyT2JqZWN0OjplbGVtZW50KCkpOyB9CisgICAgVGV4dCogZWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFRleHQqPihSZW5kZXJPYmplY3Q6OmVsZW1l
bnQoKSk7IH0KIAogICAgIElubGluZVRleHRCb3gqIGZpcnN0VGV4dEJveCgpIGNvbnN0IHsgcmV0
dXJuIG1fZmlyc3RUZXh0Qm94OyB9CiAgICAgSW5saW5lVGV4dEJveCogbGFzdFRleHRCb3goKSBj
b25zdCB7IHJldHVybiBtX2xhc3RUZXh0Qm94OyB9Ci0gICAgCi0gICAgdmlydHVhbCBJbmxpbmVC
b3ggKmlubGluZUJveChpbnQgb2Zmc2V0LCBFQWZmaW5pdHkgYWZmaW5pdHkgPSBVUFNUUkVBTSk7
CisKKyAgICB2aXJ0dWFsIElubGluZUJveCogaW5saW5lQm94KGludCBvZmZzZXQsIEVBZmZpbml0
eSA9IFVQU1RSRUFNKTsKIAogICAgIGludCB3aWR0aEZyb21DYWNoZShjb25zdCBGb250KiwgaW50
IHN0YXJ0LCBpbnQgbGVuLCBpbnQgdGFiV2lkdGgsIGludCB4cG9zKSBjb25zdDsKLSAgICBib29s
IHNob3VsZFVzZU1vbm9zcGFjZUNhY2hlKGNvbnN0IEZvbnQgKikgY29uc3Q7CisgICAgYm9vbCBz
aG91bGRVc2VNb25vc3BhY2VDYWNoZShjb25zdCBGb250KikgY29uc3Q7CiAgICAgdm9pZCBjYWNo
ZVdpZHRocygpOwogICAgIGJvb2wgYWxsQXNjaWkoKSBjb25zdDsKIApAQCAtMTUzLDI3ICsxNTMs
MjcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgY29udGFpbnNSZXZlcnNlZFRleHQoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRhaW5zUmV2ZXJzZWRUZXh0OyB9CiAgICAgCi1wdWJsaWM6Ci0gICAg
SW5saW5lVGV4dEJveCAqIGZpbmROZXh0SW5saW5lVGV4dEJveCggaW50IG9mZnNldCwgaW50ICZw
b3MgKSBjb25zdDsKKyAgICBJbmxpbmVUZXh0Qm94KiBmaW5kTmV4dElubGluZVRleHRCb3goaW50
IG9mZnNldCwgaW50JiBwb3MpIGNvbnN0OwogCi1wcm90ZWN0ZWQ6IC8vIG1lbWJlcnMKK3Byb3Rl
Y3RlZDoKKyAgICAvLyBtZW1iZXJzCiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IHN0cjsKLSAgICAK
KwogICAgIElubGluZVRleHRCb3gqIG1fZmlyc3RUZXh0Qm94OwogICAgIElubGluZVRleHRCb3gq
IG1fbGFzdFRleHRCb3g7Ci0gICAgCisKICAgICBpbnQgbV9taW5XaWR0aDsKICAgICBpbnQgbV9t
YXhXaWR0aDsKICAgICBpbnQgbV9iZWdpbk1pbldpZHRoOwogICAgIGludCBtX2VuZE1pbldpZHRo
OwotICAgIAorCiAgICAgU2VsZWN0aW9uU3RhdGUgbV9zZWxlY3Rpb25TdGF0ZSA6IDMgOwogICAg
IGJvb2wgbV9oYXNCcmVha2FibGVDaGFyIDogMTsgLy8gV2hldGhlciBvciBub3Qgd2UgY2FuIGJl
IGJyb2tlbiBpbnRvIG11bHRpcGxlIGxpbmVzLgogICAgIGJvb2wgbV9oYXNCcmVhayA6IDE7IC8v
IFdoZXRoZXIgb3Igbm90IHdlIGhhdmUgYSBoYXJkIGJyZWFrIChlLmcuLCA8cHJlPiB3aXRoICdc
bicpLgogICAgIGJvb2wgbV9oYXNUYWIgOiAxOyAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBoYXZlIGEg
dmFyaWFibGUgd2lkdGggdGFiIGNoYXJhY3RlciAoZS5nLiwgPHByZT4gd2l0aCAnXHQnKS4KICAg
ICBib29sIG1faGFzQmVnaW5XUyA6IDE7IC8vIFdoZXRoZXIgb3Igbm90IHdlIGJlZ2luIHdpdGgg
V1MgKG9ubHkgdHJ1ZSBpZiB3ZSBhcmVuJ3QgcHJlKQogICAgIGJvb2wgbV9oYXNFbmRXUyA6IDE7
IC8vIFdoZXRoZXIgb3Igbm90IHdlIGVuZCB3aXRoIFdTIChvbmx5IHRydWUgaWYgd2UgYXJlbid0
IHByZSkKLSAgICAKKwogICAgIGJvb2wgbV9saW5lc0RpcnR5IDogMTsgLy8gVGhpcyBiaXQgaW5k
aWNhdGVzIHRoYXQgdGhlIHRleHQgcnVuIGhhcyBhbHJlYWR5IGRpcnRpZWQgc3BlY2lmaWMKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpbmUgYm94ZXMsIGFuZCB0aGlzIGhpbnQgd2ls
bCBlbmFibGUgbGF5b3V0SW5saW5lQ2hpbGRyZW4gdG8gYXZvaWQKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGp1c3QgZGlydHlpbmcgZXZlcnl0aGluZyB3aGVuIGNoYXJhY3RlciBkYXRh
IGlzIG1vZGlmaWVkIChlLmcuLCBhcHBlbmRlZC9pbnNlcnRlZApAQCAtMTg4LDYgKzE4OCw2IEBA
IHByb3RlY3RlZDogLy8gbWVtYmVycwogCiBVQnJlYWtJdGVyYXRvciogY2hhcmFjdGVyQnJlYWtJ
dGVyYXRvcihjb25zdCBTdHJpbmdJbXBsKik7CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAotI2VuZGlmCisjZW5kaWYgLy8gUmVuZGVyVGV4dF9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWUuY3BwCShyZXZpc2lvbiAxNzQ0NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsMzEgKzc3LDMxIEBAIHZvaWQgUmVuZGVyVGhl
bWU6OmFkanVzdFN0eWxlKENTU1N0eWxlU2UKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWU6
OnBhaW50KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lOjpwYWludChSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHIpCiB7CiAgICAgLy8gSWYgcGFpbnRpbmcgaXMgZGlzYWJsZWQsIGJ1dCB3ZSBhcmVuJ3Qg
dXBkYXRpbmcgY29udHJvbCB0aW50cywgdGhlbiBqdXN0IGJhaWwuCiAgICAgLy8gSWYgd2UgYXJl
IHVwZGF0aW5nIGNvbnRyb2wgdGludHMsIGp1c3Qgc2NoZWR1bGUgYSByZXBhaW50IGlmIHRoZSB0
aGVtZSBzdXBwb3J0cyB0aW50aW5nCiAgICAgLy8gZm9yIHRoYXQgY29udHJvbC4KLSAgICBpZiAo
aS5wLT51cGRhdGluZ0NvbnRyb2xUaW50cygpKSB7CisgICAgaWYgKHBhaW50SW5mby5jb250ZXh0
LT51cGRhdGluZ0NvbnRyb2xUaW50cygpKSB7CiAgICAgICAgIGlmIChjb250cm9sU3VwcG9ydHNU
aW50cyhvKSkKICAgICAgICAgICAgIG8tPnJlcGFpbnQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KLSAgICBpZiAoaS5wLT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKHBhaW50
SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgCisKICAgICAvLyBDYWxsIHRoZSBhcHByb3ByaWF0ZSBwYWludCBtZXRob2QgYmFz
ZWQgb2ZmIHRoZSBhcHBlYXJhbmNlIHZhbHVlLgogICAgIHN3aXRjaCAoby0+c3R5bGUoKS0+YXBw
ZWFyYW5jZSgpKSB7CiAgICAgICAgIGNhc2UgQ2hlY2tib3hBcHBlYXJhbmNlOgotICAgICAgICAg
ICAgcmV0dXJuIHBhaW50Q2hlY2tib3gobywgaSwgcik7CisgICAgICAgICAgICByZXR1cm4gcGFp
bnRDaGVja2JveChvLCBwYWludEluZm8sIHIpOwogICAgICAgICBjYXNlIFJhZGlvQXBwZWFyYW5j
ZToKLSAgICAgICAgICAgIHJldHVybiBwYWludFJhZGlvKG8sIGksIHIpOworICAgICAgICAgICAg
cmV0dXJuIHBhaW50UmFkaW8obywgcGFpbnRJbmZvLCByKTsKICAgICAgICAgY2FzZSBQdXNoQnV0
dG9uQXBwZWFyYW5jZToKICAgICAgICAgY2FzZSBTcXVhcmVCdXR0b25BcHBlYXJhbmNlOgogICAg
ICAgICBjYXNlIEJ1dHRvbkFwcGVhcmFuY2U6Ci0gICAgICAgICAgICByZXR1cm4gcGFpbnRCdXR0
b24obywgaSwgcik7CisgICAgICAgICAgICByZXR1cm4gcGFpbnRCdXR0b24obywgcGFpbnRJbmZv
LCByKTsKICAgICAgICAgY2FzZSBNZW51bGlzdEFwcGVhcmFuY2U6Ci0gICAgICAgICAgICByZXR1
cm4gcGFpbnRNZW51TGlzdChvLCBpLCByKTsKKyAgICAgICAgICAgIHJldHVybiBwYWludE1lbnVM
aXN0KG8sIHBhaW50SW5mbywgcik7CiAgICAgICAgIGNhc2UgTWVudWxpc3RCdXR0b25BcHBlYXJh
bmNlOgogICAgICAgICBjYXNlIFRleHRGaWVsZEFwcGVhcmFuY2U6CiAgICAgICAgIGNhc2UgVGV4
dEFyZWFBcHBlYXJhbmNlOgpAQCAtMTEwLDIyICsxMTAsMjIgQEAgYm9vbCBSZW5kZXJUaGVtZTo6
cGFpbnQoUmVuZGVyT2JqZWN0KiBvLAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIHRydWU7IC8vIFdlIGRvbid0IHN1cHBvcnQg
dGhlIGFwcGVhcmFuY2UsIHNvIGxldCB0aGUgbm9ybWFsIGJhY2tncm91bmQvYm9yZGVyIHBhaW50
LgogfQogCi1ib29sIFJlbmRlclRoZW1lOjpwYWludEJvcmRlck9ubHkoUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK2Jv
b2wgUmVuZGVyVGhlbWU6OnBhaW50Qm9yZGVyT25seShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0g
ICAgaWYgKGkucC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIGlmIChwYWludEluZm8uY29udGV4
dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAor
CiAgICAgLy8gQ2FsbCB0aGUgYXBwcm9wcmlhdGUgcGFpbnQgbWV0aG9kIGJhc2VkIG9mZiB0aGUg
YXBwZWFyYW5jZSB2YWx1ZS4KICAgICBzd2l0Y2ggKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSkg
ewogICAgICAgICBjYXNlIFRleHRGaWVsZEFwcGVhcmFuY2U6Ci0gICAgICAgICAgICByZXR1cm4g
cGFpbnRUZXh0RmllbGQobywgaSwgcik7CisgICAgICAgICAgICByZXR1cm4gcGFpbnRUZXh0Rmll
bGQobywgcGFpbnRJbmZvLCByKTsKICAgICAgICAgY2FzZSBMaXN0Ym94QXBwZWFyYW5jZToKICAg
ICAgICAgY2FzZSBUZXh0QXJlYUFwcGVhcmFuY2U6Ci0gICAgICAgICAgICByZXR1cm4gcGFpbnRU
ZXh0QXJlYShvLCBpLCByKTsKKyAgICAgICAgICAgIHJldHVybiBwYWludFRleHRBcmVhKG8sIHBh
aW50SW5mbywgcik7CiAgICAgICAgIGNhc2UgTWVudWxpc3RCdXR0b25BcHBlYXJhbmNlOgogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhc2UgQ2hlY2tib3hBcHBlYXJhbmNlOgpA
QCAtMTM3LDE5ICsxMzcsMTkgQEAgYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnRCb3JkZXJPbmx5KFJl
bmRlcgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAor
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lOjpwYWludERlY29yYXRp
b25zKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lOjpwYWludERlY29yYXRpb25zKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKIHsKLSAgICBpZiAoaS5wLT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAg
aWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgCisKICAgICAvLyBDYWxsIHRoZSBhcHByb3ByaWF0ZSBwYWludCBt
ZXRob2QgYmFzZWQgb2ZmIHRoZSBhcHBlYXJhbmNlIHZhbHVlLgogICAgIHN3aXRjaCAoby0+c3R5
bGUoKS0+YXBwZWFyYW5jZSgpKSB7CiAgICAgICAgIGNhc2UgTWVudWxpc3RCdXR0b25BcHBlYXJh
bmNlOgotICAgICAgICAgICAgcmV0dXJuIHBhaW50TWVudUxpc3RCdXR0b24obywgaSwgcik7Cisg
ICAgICAgICAgICByZXR1cm4gcGFpbnRNZW51TGlzdEJ1dHRvbihvLCBwYWludEluZm8sIHIpOwog
ICAgICAgICBjYXNlIFRleHRGaWVsZEFwcGVhcmFuY2U6CiAgICAgICAgIGNhc2UgVGV4dEFyZWFB
cHBlYXJhbmNlOgogICAgICAgICBjYXNlIExpc3Rib3hBcHBlYXJhbmNlOgpAQCAtMTYyLDcgKzE2
Miw3IEBAIGJvb2wgUmVuZGVyVGhlbWU6OnBhaW50RGVjb3JhdGlvbnMoUmVuZGUKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBm
YWxzZTsKIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCShyZXZpc2lvbiAxNzQ0NykK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTIw
LDggKzIwLDggQEAKICAqCiAgKi8KIAotI2lmbmRlZiBSRU5ERVJfVEhFTUVfSAotI2RlZmluZSBS
RU5ERVJfVEhFTUVfSAorI2lmbmRlZiBSZW5kZXJUaGVtZV9oCisjZGVmaW5lIFJlbmRlclRoZW1l
X2gKIAogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogCkBAIC0zNSw2MyArMzUsNjIgQEAgZW51
bSBDb250cm9sU3RhdGUgeyBIb3ZlclN0YXRlLCBQcmVzc2VkUwogCiBjbGFzcyBSZW5kZXJUaGVt
ZSB7CiBwdWJsaWM6Ci0gICAgUmVuZGVyVGhlbWUoKSB7fQotICAgIHZpcnR1YWwgflJlbmRlclRo
ZW1lKCkge30KKyAgICBSZW5kZXJUaGVtZSgpIHsgfQorICAgIHZpcnR1YWwgflJlbmRlclRoZW1l
KCkgeyB9CiAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgc3R5bGUgaGFz
IGJlZW4gY29tcHV0ZWQgZm9yIGFuIGVsZW1lbnQgYW5kIHRoZSBhcHBlYXJhbmNlCiAgICAgLy8g
cHJvcGVydHkgaGFzIGJlZW4gc2V0IHRvIGEgdmFsdWUgb3RoZXIgdGhhbiAibm9uZSIuICBUaGUg
dGhlbWUgc2hvdWxkIG1hcCBpbiBhbGwgb2YgdGhlIGFwcHJvcHJpYXRlCiAgICAgLy8gbWV0cmlj
cyBhbmQgZGVmYXVsdHMgZ2l2ZW4gdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHlsZS4gIFRoaXMgaW5j
bHVkZXMgc29waGlzdGljYXRlZCBvcGVyYXRpb25zIGxpa2UKICAgICAvLyBzZWxlY3Rpb24gb2Yg
Y29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgZm9udCwgdGhlIGRpc2FibGluZyBvZiBhcHBlYXJh
bmNlIHdoZW4gY2VydGFpbiBvdGhlciBwcm9wZXJ0aWVzIGxpa2UKICAgICAvLyAiYm9yZGVyIiBh
cmUgc2V0LCBvciBpZiB0aGUgYXBwZWFyYW5jZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSB0aGVt
ZS4KLSAgICB2b2lkIGFkanVzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqLCAKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBVQUhhc0FwcGVhcmFuY2UsIGNv
bnN0IEJvcmRlckRhdGEmLCBjb25zdCBCYWNrZ3JvdW5kTGF5ZXImLCBjb25zdCBDb2xvciYgYmFj
a2dyb3VuZENvbG9yKTsKLSAgICAKKyAgICB2b2lkIGFkanVzdFN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqLCAgYm9vbCBVQUhhc0FwcGVhcmFuY2UsIAorICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEJhY2tncm91bmRMYXll
ciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpOworCiAgICAgLy8gVGhpcyBtZXRob2Qg
aXMgY2FsbGVkIHRvIHBhaW50IHRoZSB3aWRnZXQgYXMgYSBiYWNrZ3JvdW5kIG9mIHRoZSBSZW5k
ZXJPYmplY3QuICBBIHdpZGdldCdzIGZvcmVncm91bmQsIGUuZy4sIHRoZQogICAgIC8vIHRleHQg
b2YgYSBidXR0b24sIGlzIGFsd2F5cyByZW5kZXJlZCBieSB0aGUgZW5naW5lIGl0c2VsZi4gIFRo
ZSBib29sZWFuIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMKICAgICAvLyB3aGV0aGVyIHRoZSBDU1Mg
Ym9yZGVyL2JhY2tncm91bmQgc2hvdWxkIGFsc28gYmUgcGFpbnRlZC4KLSAgICBib29sIHBhaW50
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHIpOwotICAgIGJvb2wgcGFpbnRCb3JkZXJPbmx5KFJlbmRlck9iamVjdCogbywg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOwotICAg
IGJvb2wgcGFpbnREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKyAgICBib29sIHBhaW50KFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworICAgIGJvb2wgcGFpbnRCb3JkZXJPbmx5KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIGJvb2wgcGFpbnREZWNvcmF0
aW9ucyhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKIAogICAgIC8vIFRoZSByZW1haW5pbmcgbWV0aG9kcyBzaG91bGQgYmUgaW1w
bGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHBvcnRpb24gb2YgdGhlIHRoZW1lLCBl
LmcuLAogICAgIC8vIFJlbmRlclRoZW1lTWFjLmNwcCBmb3IgTWFjIE9TIFguCi0gICAgCisKICAg
ICAvLyBBIG1ldGhvZCB0byBvYnRhaW4gdGhlIGJhc2VsaW5lIHBvc2l0aW9uIGZvciBhICJsZWFm
IiBjb250cm9sLiAgVGhpcyB3aWxsIG9ubHkgYmUgdXNlZCBpZiBhIGJhc2VsaW5lCiAgICAgLy8g
cG9zaXRpb24gY2Fubm90IGJlIGRldGVybWluZWQgYnkgZXhhbWluaW5nIGNoaWxkIGNvbnRlbnQu
IENoZWNrYm94ZXMgYW5kIHJhZGlvIGJ1dHRvbnMgYXJlIGV4YW1wbGVzIG9mCiAgICAgLy8gY29u
dHJvbHMgdGhhdCBuZWVkIHRvIGRvIHRoaXMuCi0gICAgdmlydHVhbCBzaG9ydCBiYXNlbGluZVBv
c2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3Q7CisgICAgdmlydHVhbCBzaG9ydCBi
YXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwogCiAgICAgLy8gQSBt
ZXRob2QgZm9yIGFza2luZyBpZiBhIGNvbnRyb2wgaXMgYSBjb250YWluZXIgb3Igbm90LiAgTGVh
ZiBjb250cm9scyBoYXZlIHRvIGhhdmUgc29tZSBzcGVjaWFsIGJlaGF2aW9yIChsaWtlCiAgICAg
Ly8gdGhlIGJhc2VsaW5lIHBvc2l0aW9uIEFQSSBhYm92ZSkuCi0gICAgdmlydHVhbCBib29sIGlz
Q29udHJvbENvbnRhaW5lcihFQXBwZWFyYW5jZSBhcHBlYXJhbmNlKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNDb250cm9sQ29udGFpbmVyKEVBcHBlYXJhbmNlKSBjb25zdDsKIAogICAgIC8v
IEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhl
IHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90LgotICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9y
dHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCop
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgY29u
dHJvbCBoYXMgYmVlbiBzdHlsZWQgZW5vdWdoIGJ5IHRoZSBhdXRob3IgdG8gZGlzYWJsZSB0aGUg
bmF0aXZlIGFwcGVhcmFuY2UuCi0gICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYWNrZ3JvdW5kTGF5ZXImIGJhY2tncm91
bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwg
Y29uc3QgQmFja2dyb3VuZExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29u
c3Q7CiAKICAgICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50
aW5nIGlzIHN1cHBvcnRlZCBhdCBhbGwuCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJv
bFRpbnRzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIC8vIFNvbWUgY29udHJvbHMg
bWF5IHNwaWxsIG91dCBvZiB0aGVpciBjb250YWluZXJzIChlLmcuLCB0aGUgY2hlY2sgb24gYW4g
T1MgWCBjaGVja2JveCkuICBXaGVuIHRoZXNlIGNvbnRyb2xzIHJlcGFpbnQsCiAgICAgLy8gdGhl
IHRoZW1lIG5lZWRzIHRvIGNvbW11bmljYXRlIHRoaXMgaW5mbGF0ZWQgcmVjdCB0byB0aGUgZW5n
aW5lIHNvIHRoYXQgaXQgY2FuIGludmFsaWRhdGUgdGhlIHdob2xlIGNvbnRyb2wuCi0gICAgdmly
dHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogbywgSW50UmVj
dCYgcikgeyB9Ci0gICAgCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0
IFJlbmRlck9iamVjdCosIEludFJlY3QmKSB7IH0KKwogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNh
bGxlZCB3aGVuZXZlciBhIHJlbGV2YW50IHN0YXRlIGNoYW5nZXMgb24gYSBwYXJ0aWN1bGFyIHRo
ZW1lZCBvYmplY3QsIGUuZy4sIHRoZSBtb3VzZSBiZWNvbWVzIHByZXNzZWQKICAgICAvLyBvciBh
IGNvbnRyb2wgYmVjb21lcyBkaXNhYmxlZC4KLSAgICB2aXJ0dWFsIGJvb2wgc3RhdGVDaGFuZ2Vk
KFJlbmRlck9iamVjdCogbywgQ29udHJvbFN0YXRlIHN0YXRlKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgc3RhdGVDaGFuZ2VkKFJlbmRlck9iamVjdCosIENvbnRyb2xTdGF0ZSkgY29uc3Q7CiAK
ICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIHRoZW1lIGNoYW5nZXMg
b24gdGhlIHN5c3RlbSBpbiBvcmRlciB0byBmbHVzaCBjYWNoZWQgcmVzb3VyY2VzIGZyb20gdGhl
CiAgICAgLy8gb2xkIHRoZW1lLgotICAgIHZpcnR1YWwgdm9pZCB0aGVtZUNoYW5nZWQoKSB7fTsK
KyAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCkgeyB9CiAKICAgICAvLyBBIG1ldGhvZCBh
c2tpbmcgaWYgdGhlIHRoZW1lIGlzIGFibGUgdG8gZHJhdyB0aGUgZm9jdXMgcmluZy4KLSAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdDsKLSAgICAKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVu
ZGVyU3R5bGUqKSBjb25zdDsKKwogICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUn
cyBjb250cm9scyBhY3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQuCi0g
ICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNv
bnN0IFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIC8vIFRoZSBz
ZWxlY3Rpb24gY29sb3IuCiAgICAgQ29sb3IgYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KCkgY29uc3Q7CkBAIC0xMDIsMTQgKzEwMSwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDb2xv
ciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNv
bnN0OwogICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91
bmRDb2xvcigpIGNvbnN0OwotICAgIAorCiAgICAgLy8gTGlzdCBCb3ggc2VsZWN0aW9uIGNvbG9y
CiAgICAgdmlydHVhbCBDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yKCkgY29uc3Q7CiAgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKICAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZl
TGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OwogCi0KICAgICAvLyBTeXN0
ZW0gZm9udHMuCiAgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERl
c2NyaXB0aW9uJikgY29uc3QgPSAwOwogCkBAIC0xMTcsNDQgKzExNSw0NCBAQCBwdWJsaWM6CiAK
IHByb3RlY3RlZDoKICAgICAvLyBNZXRob2RzIGZvciBzdGF0ZSBxdWVyeWluZwotICAgIGJvb2wg
aXNDaGVja2VkKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3Q7Ci0gICAgYm9vbCBpc0luZGV0
ZXJtaW5hdGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdDsKLSAgICBib29sIGlzRW5hYmxl
ZChjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0OwotICAgIGJvb2wgaXNGb2N1c2VkKGNvbnN0
IFJlbmRlck9iamVjdCogbykgY29uc3Q7Ci0gICAgYm9vbCBpc1ByZXNzZWQoY29uc3QgUmVuZGVy
T2JqZWN0KiBvKSBjb25zdDsKLSAgICBib29sIGlzSG92ZXJlZChjb25zdCBSZW5kZXJPYmplY3Qq
IG8pIGNvbnN0OwotICAgIGJvb2wgaXNSZWFkT25seUNvbnRyb2woY29uc3QgUmVuZGVyT2JqZWN0
KiBvKSBjb25zdDsKKyAgICBib29sIGlzQ2hlY2tlZChjb25zdCBSZW5kZXJPYmplY3QqKSBjb25z
dDsKKyAgICBib29sIGlzSW5kZXRlcm1pbmF0ZShjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsK
KyAgICBib29sIGlzRW5hYmxlZChjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICBib29s
IGlzRm9jdXNlZChjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICBib29sIGlzUHJlc3Nl
ZChjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICBib29sIGlzSG92ZXJlZChjb25zdCBS
ZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICBib29sIGlzUmVhZE9ubHlDb250cm9sKGNvbnN0IFJl
bmRlck9iamVjdCopIGNvbnN0OwogCiAgICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBlYXJhbmNl
IHZhbHVlLgotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RDaGVja2JveFN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpIHsgcmV0dXJuIHRydWU7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkg
Y29uc3Qge307CisgICAgdmlydHVhbCB2b2lkIGFkanVzdENoZWNrYm94U3R5bGUoQ1NTU3R5bGVT
ZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKikgY29uc3QgeyB9CiAgICAgCi0gICAgdmlydHVh
bCB2b2lkIGFkanVzdFJhZGlvU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50
UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjdCYgcikgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzZXRS
YWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdCB7fTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0UmFkaW9TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdCB7
IH0KICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxl
Y3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpIHsgcmV0dXJuIHRydWU7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
IHt9OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50
QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9u
U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRl
eHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqIGUpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRG
aWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsg
fQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3Q7Ci0gICAg
dmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0
QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVu
dUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRS
ZWN0JiByKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0
U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpIHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogfTsKIAogLy8g
RnVuY3Rpb24gdG8gb2J0YWluIHRoZSB0aGVtZS4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgaW4geW91
ciBwbGF0Zm9ybS1zcGVjaWZpYyB0aGVtZSBpbXBsZW1lbnRhdGlvbiB0byBoYW5kCiAvLyBiYWNr
IHRoZSBhcHByb3ByaWF0ZSBwbGF0Zm9ybSB0aGVtZS4KIFJlbmRlclRoZW1lKiB0aGVtZSgpOwog
Ci19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIFJlbmRlclRo
ZW1lX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAxNzQ0
NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzgsNyArMzM4LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250
cm9sUwogICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZSgpOwogfQogCi1ib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIC8vIERldGVybWluZSB0aGUgd2lkdGggYW5k
IGhlaWdodCBuZWVkZWQgZm9yIHRoZSBjb250cm9sIGFuZCBwcmVwYXJlIHRoZSBjZWxsIGZvciBw
YWludGluZy4KICAgICBzZXRDaGVja2JveENlbGxTdGF0ZShvLCByKTsKQEAgLTM5OCw3ICszOTgs
NyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRDaGVja2JveFNpemUoUmVuCiAgICAgc2V0U2l6
ZUZyb21Gb250KHN0eWxlLCBjaGVja2JveFNpemVzKCkpOwogfQogCi1ib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFJh
ZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JiByKQogewogICAgIC8vIERldGVybWluZSB0aGUgd2lkdGggYW5kIGhlaWdodCBu
ZWVkZWQgZm9yIHRoZSBjb250cm9sIGFuZCBwcmVwYXJlIHRoZSBjZWxsIGZvciBwYWludGluZy4K
ICAgICBzZXRSYWRpb0NlbGxTdGF0ZShvLCByKTsKQEAgLTU3MSwxMSArNTcxLDExIEBAIHZvaWQg
UmVuZGVyVGhlbWVNYWM6OnNldEJ1dHRvbkNlbGxTdGF0ZSgKIAogYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIExvY2FsQ3VycmVudEdy
YXBoaWNzQ29udGV4dCBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQocGFpbnRJbmZvLnApOwor
ICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRl
eHQocGFpbnRJbmZvLmNvbnRleHQpOwogCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSB3aWR0aCBhbmQg
aGVpZ2h0IG5lZWRlZCBmb3IgdGhlIGNvbnRyb2wgYW5kIHByZXBhcmUgdGhlIGNlbGwgZm9yIHBh
aW50aW5nLgogICAgIHNldEJ1dHRvbkNlbGxTdGF0ZShvLCByKTsKLSAgICAKKwogICAgIC8vIFdl
IGluZmxhdGUgdGhlIHJlY3QgYXMgbmVlZGVkIHRvIGFjY291bnQgZm9yIHBhZGRpbmcgaW5jbHVk
ZWQgaW4gdGhlIGNlbGwgdG8gYWNjb21tb2RhdGUgdGhlIGJ1dHRvbgogICAgIC8vIHNoYWRvdy4g
IFdlIGRvbid0IGNvbnNpZGVyIHRoaXMgcGFydCBvZiB0aGUgYm91bmRzIG9mIHRoZSBjb250cm9s
IGluIFdlYktpdC4KICAgICBJbnRTaXplIHNpemUgPSBidXR0b25TaXplcygpW1tidXR0b24gY29u
dHJvbFNpemVdXTsKQEAgLTU4Nyw3ICs1ODcsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWlu
dEJ1dHRvbihSZW5kZXJPCiAgICAgICAgICAgICBpbmZsYXRlZFJlY3Quc2V0WShpbmZsYXRlZFJl
Y3QueSgpICsgKGluZmxhdGVkUmVjdC5oZWlnaHQoKSAtIHNpemUuaGVpZ2h0KCkpIC8gMik7CiAg
ICAgICAgICAgICBpbmZsYXRlZFJlY3Quc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkpOwogICAgICAg
ICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIE5vdyBpbmZsYXRlIGl0IHRvIGFjY291bnQgZm9y
IHRoZSBzaGFkb3cuCiAgICAgICAgIGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KGluZmxhdGVk
UmVjdCwgc2l6ZSwgYnV0dG9uTWFyZ2lucygpKTsKICAgICB9CkBAIC02MDAsNyArNjAwLDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRCdXR0b24oUmVuZGVyTwogCiBib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgTG9jYWxD
dXJyZW50R3JhcGhpY3NDb250ZXh0IExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dChwYWludElu
Zm8ucCk7CisgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IExvY2FsQ3VycmVudEdyYXBo
aWNzQ29udGV4dChwYWludEluZm8uY29udGV4dCk7CiAgICAgd2tEcmF3QmV6ZWxlZFRleHRGaWVs
ZENlbGwociwgaXNFbmFibGVkKG8pICYmICFpc1JlYWRPbmx5Q29udHJvbChvKSk7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQpAQCAtNjExLDcgKzYxMSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFk
anVzdFRleHRGaWVsZFN0eWwKIAogYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0QXJlYShS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dChwYWludEluZm8ucCk7CisgICAgTG9jYWxDdXJyZW50
R3JhcGhpY3NDb250ZXh0IExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dChwYWludEluZm8uY29u
dGV4dCk7CiAgICAgd2tEcmF3QmV6ZWxlZFRleHRBcmVhKHIsIGlzRW5hYmxlZChvKSAmJiAhaXNS
ZWFkT25seUNvbnRyb2wobykpOwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTY1OSwxNCArNjU5
LDE0IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFBvcHVwUGFkZGluZ0Zyb20KIGJvb2wgUmVu
ZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgc2V0UG9wdXBCdXR0
b25DZWxsU3RhdGUobywgcik7Ci0gICAgCisKICAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHI7
CiAgICAgSW50U2l6ZSBzaXplID0gcG9wdXBCdXR0b25TaXplcygpW1twb3B1cEJ1dHRvbiBjb250
cm9sU2l6ZV1dOwogICAgIHNpemUuc2V0V2lkdGgoci53aWR0aCgpKTsKIAogICAgIC8vIE5vdyBp
bmZsYXRlIGl0IHRvIGFjY291bnQgZm9yIHRoZSBzaGFkb3cuCiAgICAgaW5mbGF0ZWRSZWN0ID0g
aW5mbGF0ZVJlY3QoaW5mbGF0ZWRSZWN0LCBzaXplLCBwb3B1cEJ1dHRvbk1hcmdpbnMoKSk7Ci0g
ICAgICAgIAorCiAgICAgW3BvcHVwQnV0dG9uIGRyYXdXaXRoRnJhbWU6aW5mbGF0ZWRSZWN0IGlu
VmlldzpvLT52aWV3KCktPmZyYW1lVmlldygpLT5nZXREb2N1bWVudFZpZXcoKV07CiAgICAgW3Bv
cHVwQnV0dG9uIHNldENvbnRyb2xWaWV3Om5pbF07CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzE0
LDg0ICs3MTQsODQgQEAgc3RhdGljIHZvaWQgTWFpbkdyYWRpZW50SW50ZXJwb2xhdGUoIHZvaQog
ICAgICAgICBvdXREYXRhW2ldID0gKCAxLjAgLSBhICkgKiBkYXJrW2ldICsgYSAqIGxpZ2h0W2ld
OwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRz
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHIpCit2b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uR3Jh
ZGllbnRzKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9
IGkucC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgICAgIAotICAgIGkucC0+c2F2ZSgpOworICAg
IENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpOworCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKIAogICAgIGludCByYWRpdXMg
PSBvLT5zdHlsZSgpLT5ib3JkZXJUb3BMZWZ0UmFkaXVzKCkud2lkdGgoKTsKLSAgICAKKwogICAg
IENHQ29sb3JTcGFjZVJlZiBjc3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsg
ICAgCiAKICAgICBGbG9hdFJlY3QgdG9wR3JhZGllbnQoci54KCksIHIueSgpLCByLndpZHRoKCks
IHIuaGVpZ2h0KCkgLyAyLjApOwogICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIHRvcENh
bGxiYWNrcyA9IHsgMCwgVG9wR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVMTCB9OwotICAgIENHRnVu
Y3Rpb25SZWYgdG9wRnVuY3Rpb24gPSBDR0Z1bmN0aW9uQ3JlYXRlKCBOVUxMLCAxLCBOVUxMLCA0
LCBOVUxMLCAmdG9wQ2FsbGJhY2tzICk7Ci0gICAgQ0dTaGFkaW5nUmVmIHRvcFNoYWRpbmcgPSBD
R1NoYWRpbmdDcmVhdGVBeGlhbCggY3NwYWNlLCBDR1BvaW50TWFrZSh0b3BHcmFkaWVudC54KCks
ICB0b3BHcmFkaWVudC55KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDR1BvaW50
TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50LmJvdHRvbSgpKSwgdG9wRnVuY3Rpb24s
IGZhbHNlLCBmYWxzZSApOworICAgIENHRnVuY3Rpb25SZWYgdG9wRnVuY3Rpb24gPSBDR0Z1bmN0
aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZ0b3BDYWxsYmFja3MpOworICAgIENH
U2hhZGluZ1JlZiB0b3BTaGFkaW5nID0gQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1Bv
aW50TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50LnkoKSksIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dQb2ludE1ha2UodG9wR3Jh
ZGllbnQueCgpLCB0b3BHcmFkaWVudC5ib3R0b20oKSksIHRvcEZ1bmN0aW9uLCBmYWxzZSwgZmFs
c2UpOwogCiAgICAgRmxvYXRSZWN0IGJvdHRvbUdyYWRpZW50KHIueCgpICsgcmFkaXVzLCByLnko
KSArIHIuaGVpZ2h0KCkgLyAyLjAsIHIud2lkdGgoKSAtIDIgKiByYWRpdXMsIHIuaGVpZ2h0KCkg
LyAyLjApOwogICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIGJvdHRvbUNhbGxiYWNrcyA9
IHsgMCwgQm90dG9tR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVMTCB9OwotICAgIENHRnVuY3Rpb25S
ZWYgYm90dG9tRnVuY3Rpb24gPSBDR0Z1bmN0aW9uQ3JlYXRlKCBOVUxMLCAxLCBOVUxMLCA0LCBO
VUxMLCAmYm90dG9tQ2FsbGJhY2tzICk7Ci0gICAgQ0dTaGFkaW5nUmVmIGJvdHRvbVNoYWRpbmcg
PSBDR1NoYWRpbmdDcmVhdGVBeGlhbCggY3NwYWNlLCBDR1BvaW50TWFrZShib3R0b21HcmFkaWVu
dC54KCksICBib3R0b21HcmFkaWVudC55KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDR1BvaW50TWFrZShib3R0b21HcmFkaWVudC54KCksIGJvdHRvbUdyYWRpZW50LmJvdHRvbSgp
KSwgYm90dG9tRnVuY3Rpb24sIGZhbHNlLCBmYWxzZSApOworICAgIENHRnVuY3Rpb25SZWYgYm90
dG9tRnVuY3Rpb24gPSBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZi
b3R0b21DYWxsYmFja3MpOworICAgIENHU2hhZGluZ1JlZiBib3R0b21TaGFkaW5nID0gQ0dTaGFk
aW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3R0b21HcmFkaWVudC54KCksICBi
b3R0b21HcmFkaWVudC55KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0dQb2ludE1ha2UoYm90dG9tR3JhZGllbnQueCgpLCBib3R0b21H
cmFkaWVudC5ib3R0b20oKSksIGJvdHRvbUZ1bmN0aW9uLCBmYWxzZSwgZmFsc2UpOwogCiAgICAg
c3RydWN0IENHRnVuY3Rpb25DYWxsYmFja3MgbWFpbkNhbGxiYWNrcyA9IHsgMCwgTWFpbkdyYWRp
ZW50SW50ZXJwb2xhdGUsIE5VTEwgfTsKLSAgICBDR0Z1bmN0aW9uUmVmIG1haW5GdW5jdGlvbiA9
IENHRnVuY3Rpb25DcmVhdGUoIE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZtYWluQ2FsbGJhY2tz
ICk7Ci0gICAgQ0dTaGFkaW5nUmVmIG1haW5TaGFkaW5nID0gQ0dTaGFkaW5nQ3JlYXRlQXhpYWwo
IGNzcGFjZSwgQ0dQb2ludE1ha2Uoci54KCksICByLnkoKSksIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENHUG9pbnRNYWtlKHIueCgpLCByLmJvdHRvbSgpKSwgbWFpbkZ1bmN0aW9uLCBm
YWxzZSwgZmFsc2UgKTsKLQotICAgIENHU2hhZGluZ1JlZiBsZWZ0U2hhZGluZyA9IENHU2hhZGlu
Z0NyZWF0ZUF4aWFsKCBjc3BhY2UsIENHUG9pbnRNYWtlKHIueCgpLCAgci55KCkpLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDR1BvaW50TWFrZShyLngoKSArIHJhZGl1cywgci55KCkp
LCBtYWluRnVuY3Rpb24sIGZhbHNlLCBmYWxzZSApOyAgICAgICAgICAgICAgICAgICAgICAgIAot
Ci0gICAgQ0dTaGFkaW5nUmVmIHJpZ2h0U2hhZGluZyA9IENHU2hhZGluZ0NyZWF0ZUF4aWFsKCBj
c3BhY2UsIENHUG9pbnRNYWtlKHIucmlnaHQoKSwgIHIueSgpKSwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ0dQb2ludE1ha2Uoci5yaWdodCgpIC0gcmFkaXVzLCByLnkoKSksIG1haW5G
dW5jdGlvbiwgZmFsc2UsIGZhbHNlICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAg
ICBpLnAtPnNhdmUoKTsKKyAgICBDR0Z1bmN0aW9uUmVmIG1haW5GdW5jdGlvbiA9IENHRnVuY3Rp
b25DcmVhdGUoTlVMTCwgMSwgTlVMTCwgNCwgTlVMTCwgJm1haW5DYWxsYmFja3MpOworICAgIENH
U2hhZGluZ1JlZiBtYWluU2hhZGluZyA9IENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQ
b2ludE1ha2Uoci54KCksICByLnkoKSksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENHUG9pbnRNYWtlKHIueCgpLCByLmJvdHRvbSgpKSwgbWFp
bkZ1bmN0aW9uLCBmYWxzZSwgZmFsc2UpOworCisgICAgQ0dTaGFkaW5nUmVmIGxlZnRTaGFkaW5n
ID0gQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShyLngoKSwgIHIueSgp
KSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q0dQb2ludE1ha2Uoci54KCkgKyByYWRpdXMsIHIueSgpKSwgbWFpbkZ1bmN0aW9uLCBmYWxzZSwg
ZmFsc2UpOworCisgICAgQ0dTaGFkaW5nUmVmIHJpZ2h0U2hhZGluZyA9IENHU2hhZGluZ0NyZWF0
ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uoci5yaWdodCgpLCAgci55KCkpLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dQb2ludE1ha2Uo
ci5yaWdodCgpIC0gcmFkaXVzLCByLnkoKSksIG1haW5GdW5jdGlvbiwgZmFsc2UsIGZhbHNlICk7
ICAgICAgICAgICAgCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKICAgICBDR0NvbnRl
eHRDbGlwVG9SZWN0KGNvbnRleHQsIHIpOwotICAgIGkucC0+YWRkUm91bmRlZFJlY3RDbGlwKHIs
IAorICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAociwgCiAgICAgICAg
IG8tPnN0eWxlKCktPmJvcmRlclRvcExlZnRSYWRpdXMoKSwgby0+c3R5bGUoKS0+Ym9yZGVyVG9w
UmlnaHRSYWRpdXMoKSwKICAgICAgICAgby0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1
cygpLCBvLT5zdHlsZSgpLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpKTsKICAgICBDR0NvbnRl
eHREcmF3U2hhZGluZyhjb250ZXh0LCBtYWluU2hhZGluZyk7ICAKLSAgICBpLnAtPnJlc3RvcmUo
KTsgICAgICAKKyAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOyAgICAgIAogCi0gICAg
aS5wLT5zYXZlKCk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKICAgICBDR0NvbnRl
eHRDbGlwVG9SZWN0KGNvbnRleHQsIHRvcEdyYWRpZW50KTsKLSAgICBpLnAtPmFkZFJvdW5kZWRS
ZWN0Q2xpcChlbmNsb3NpbmdJbnRSZWN0KHRvcEdyYWRpZW50KSwgCisgICAgcGFpbnRJbmZvLmNv
bnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChlbmNsb3NpbmdJbnRSZWN0KHRvcEdyYWRpZW50KSwg
CiAgICAgICAgIG8tPnN0eWxlKCktPmJvcmRlclRvcExlZnRSYWRpdXMoKSwgby0+c3R5bGUoKS0+
Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKSwKICAgICAgICAgSW50U2l6ZSgpLCBJbnRTaXplKCkpOwog
ICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIHRvcFNoYWRpbmcpOyAgCi0gICAgaS5w
LT5yZXN0b3JlKCk7ICAgICAgCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsgICAg
ICAKIAotICAgIGkucC0+c2F2ZSgpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAg
ICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBib3R0b21HcmFkaWVudCk7Ci0gICAgaS5w
LT5hZGRSb3VuZGVkUmVjdENsaXAoZW5jbG9zaW5nSW50UmVjdChib3R0b21HcmFkaWVudCksIAor
ICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoZW5jbG9zaW5nSW50UmVj
dChib3R0b21HcmFkaWVudCksIAogICAgICAgICBJbnRTaXplKCksIEludFNpemUoKSwKICAgICAg
ICAgby0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLCBvLT5zdHlsZSgpLT5ib3Jk
ZXJCb3R0b21SaWdodFJhZGl1cygpKTsKICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0
LCBib3R0b21TaGFkaW5nKTsgCi0gICAgaS5wLT5yZXN0b3JlKCk7Ci0gICAgCi0gICAgaS5wLT5z
YXZlKCk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKworICAgIHBhaW50SW5m
by5jb250ZXh0LT5zYXZlKCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCByKTsK
LSAgICBpLnAtPmFkZFJvdW5kZWRSZWN0Q2xpcChyLCAKKyAgICBwYWludEluZm8uY29udGV4dC0+
YWRkUm91bmRlZFJlY3RDbGlwKHIsIAogICAgICAgICBvLT5zdHlsZSgpLT5ib3JkZXJUb3BMZWZ0
UmFkaXVzKCksIG8tPnN0eWxlKCktPmJvcmRlclRvcFJpZ2h0UmFkaXVzKCksCiAgICAgICAgIG8t
PnN0eWxlKCktPmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKSwgby0+c3R5bGUoKS0+Ym9yZGVyQm90
dG9tUmlnaHRSYWRpdXMoKSk7CiAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgbGVm
dFNoYWRpbmcpOwogICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIHJpZ2h0U2hhZGlu
Zyk7Ci0gICAgaS5wLT5yZXN0b3JlKCk7Ci0gICAgCi0gICAgaS5wLT5yZXN0b3JlKCk7CisgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKworICAgIHBhaW50SW5mby5jb250ZXh0LT5y
ZXN0b3JlKCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b24o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3Qg
SW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b24oUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByKQogeyAgICAgICAgCi0gICAgaS5wLT5zYXZlKCk7CisgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnNhdmUoKTsKICAgICAgICAgCiAgICAgSW50UmVjdCBib3VuZHMgPSBJbnRS
ZWN0KHIueCgpICsgby0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCksIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByLnkoKSArIG8tPnN0eWxlKCktPmJvcmRlclRvcFdpZHRoKCksIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLndpZHRoKCkgLSBvLT5zdHlsZSgpLT5ib3Jk
ZXJMZWZ0V2lkdGgoKSAtIG8tPnN0eWxlKCktPmJvcmRlclJpZ2h0V2lkdGgoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgci5oZWlnaHQoKSAtIG8tPnN0eWxlKCktPmJvcmRlclRvcFdp
ZHRoKCkgLSBvLT5zdHlsZSgpLT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKICAgICAvLyBEcmF3IHRo
ZSBncmFkaWVudHMgdG8gZ2l2ZSB0aGUgc3R5bGVkIHBvcHVwIG1lbnUgYSBidXR0b24gYXBwZWFy
YW5jZQotICAgIHBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMobywgaSwgYm91bmRzKTsKKyAg
ICBwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKG8sIHBhaW50SW5mbywgYm91bmRzKTsKICAg
ICAgICAgICAgICAgICAKICAgICBmbG9hdCBmb250U2NhbGUgPSBvLT5zdHlsZSgpLT5mb250U2l6
ZSgpIC8gYmFzZUZvbnRTaXplOwogICAgIGZsb2F0IGNlbnRlclkgPSBib3VuZHMueSgpICsgYm91
bmRzLmhlaWdodCgpIC8gMi4wOwpAQCAtNzk5LDE3ICs3OTksMTcgQEAgYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgIGZsb2F0IGFycm93V2lkdGggPSBiYXNlQXJy
b3dXaWR0aCAqIGZvbnRTY2FsZTsgICAgCiAgICAgZmxvYXQgbGVmdEVkZ2UgPSBib3VuZHMucmln
aHQoKSAtIGFycm93UGFkZGluZ1JpZ2h0IC0gYXJyb3dXaWR0aDsKICAgICBmbG9hdCBzcGFjZUJl
dHdlZW5BcnJvd3MgPSBiYXNlU3BhY2VCZXR3ZWVuQXJyb3dzICogZm9udFNjYWxlOwotICAgIAot
ICAgIGkucC0+c2V0RmlsbENvbG9yKG8tPnN0eWxlKCktPmNvbG9yKCkpOwotICAgIGkucC0+c2V0
UGVuKFBlbihvLT5zdHlsZSgpLT5jb2xvcigpKSk7Ci0gICAgCisKKyAgICBwYWludEluZm8uY29u
dGV4dC0+c2V0RmlsbENvbG9yKG8tPnN0eWxlKCktPmNvbG9yKCkpOworICAgIHBhaW50SW5mby5j
b250ZXh0LT5zZXRQZW4oUGVuKG8tPnN0eWxlKCktPmNvbG9yKCkpKTsKKwogICAgIEZsb2F0UG9p
bnQgYXJyb3cxWzNdOwogICAgIGFycm93MVswXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UsIGNlbnRl
clkgLSBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjApOwogICAgIGFycm93MVsxXSA9IEZsb2F0UG9p
bnQobGVmdEVkZ2UgKyBhcnJvd1dpZHRoLCBjZW50ZXJZIC0gc3BhY2VCZXR3ZWVuQXJyb3dzIC8g
Mi4wKTsKICAgICBhcnJvdzFbMl0gPSBGbG9hdFBvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0aCAv
IDIuMCwgY2VudGVyWSAtIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMCAtIGFycm93SGVpZ2h0KTsK
IAogICAgIC8vIERyYXcgdGhlIHRvcCBhcnJvdwotICAgIGkucC0+ZHJhd0NvbnZleFBvbHlnb24o
MywgYXJyb3cxLCB0cnVlKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHln
b24oMywgYXJyb3cxLCB0cnVlKTsKIAogICAgIEZsb2F0UG9pbnQgYXJyb3cyWzNdOwogICAgIGFy
cm93MlswXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UsIGNlbnRlclkgKyBzcGFjZUJldHdlZW5BcnJv
d3MgLyAyLjApOwpAQCAtODE3LDcgKzgxNyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50
TWVudUxpc3RCdXR0b24KICAgICBhcnJvdzJbMl0gPSBGbG9hdFBvaW50KGxlZnRFZGdlICsgYXJy
b3dXaWR0aCAvIDIuMCwgY2VudGVyWSArIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMCArIGFycm93
SGVpZ2h0KTsgICAKICAgICAKICAgICAvLyBEcmF3IHRoZSBib3R0b20gYXJyb3cKLSAgICBpLnAt
PmRyYXdDb252ZXhQb2x5Z29uKDMsIGFycm93MiwgdHJ1ZSk7IAorICAgIHBhaW50SW5mby5jb250
ZXh0LT5kcmF3Q29udmV4UG9seWdvbigzLCBhcnJvdzIsIHRydWUpOyAKICAgICAKICAgICBDb2xv
ciBsZWZ0U2VwYXJhdG9yQ29sb3IoMCwgMCwgMCwgNDApOwogICAgIENvbG9yIHJpZ2h0U2VwYXJh
dG9yQ29sb3IoMjU1LCAyNTUsIDI1NSwgNDApOwpAQCAtODI1LDEzICs4MjUsMTMgQEAgYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbgogICAgIGludCBsZWZ0RWRnZU9mU2Vw
YXJhdG9yID0gaW50KGxlZnRFZGdlIC0gYXJyb3dQYWRkaW5nTGVmdCk7IC8vIEZJWE1FOiBSb3Vu
ZD8KICAgICAKICAgICAvLyBEcmF3IHRoZSBzZXBhcmF0b3IgdG8gdGhlIGxlZnQgb2YgdGhlIGFy
cm93cwotICAgIGkucC0+c2V0UGVuKFBlbihsZWZ0U2VwYXJhdG9yQ29sb3IpKTsKLSAgICBpLnAt
PmRyYXdMaW5lKEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IsIGJvdW5kcy55KCkpLCBJbnRQ
b2ludChsZWZ0RWRnZU9mU2VwYXJhdG9yLCBib3VuZHMuYm90dG9tKCkpKTsKKyAgICBwYWludElu
Zm8uY29udGV4dC0+c2V0UGVuKFBlbihsZWZ0U2VwYXJhdG9yQ29sb3IpKTsKKyAgICBwYWludElu
Zm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciwgYm91bmRz
LnkoKSksIEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IsIGJvdW5kcy5ib3R0b20oKSkpOwog
Ci0gICAgaS5wLT5zZXRQZW4oUGVuKHJpZ2h0U2VwYXJhdG9yQ29sb3IpKTsKLSAgICBpLnAtPmRy
YXdMaW5lKEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IgKyBzZXBhcmF0b3JTcGFjZSwgYm91
bmRzLnkoKSksIEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IgKyBzZXBhcmF0b3JTcGFjZSwg
Ym91bmRzLmJvdHRvbSgpKSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFBlbihQZW4ocmln
aHRTZXBhcmF0b3JDb2xvcikpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQ
b2ludChsZWZ0RWRnZU9mU2VwYXJhdG9yICsgc2VwYXJhdG9yU3BhY2UsIGJvdW5kcy55KCkpLCBJ
bnRQb2ludChsZWZ0RWRnZU9mU2VwYXJhdG9yICsgc2VwYXJhdG9yU3BhY2UsIGJvdW5kcy5ib3R0
b20oKSkpOwogCi0gICAgaS5wLT5yZXN0b3JlKCk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJl
c3RvcmUoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuY3BwCShyZXZpc2lvbiAxNzQ0NykKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsMTYgKzE0NSwxNiBAQCBib29sIFJlbmRlclZpZXc6
OmFic29sdXRlUG9zaXRpb24oaW50ICZ4CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVu
ZGVyVmlldzo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KQordm9pZCBSZW5k
ZXJWaWV3OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7CiAg
ICAgLy8gQ2FjaGUgdGhlIHByaW50IHJlY3QgYmVjYXVzZSB0aGUgZGlydHkgcmVjdCBjb3VsZCBn
ZXQgY2hhbmdlZCBkdXJpbmcgcGFpbnRpbmcuCiAgICAgaWYgKG1fcHJpbnRpbmdNb2RlKQotICAg
ICAgICBzZXRQcmludFJlY3QoaS5yKTsKKyAgICAgICAgc2V0UHJpbnRSZWN0KHBhaW50SW5mby5y
ZWN0KTsKICAgICAKLSAgICBwYWludE9iamVjdChpLCBfdHgsIF90eSk7CisgICAgcGFpbnRPYmpl
Y3QocGFpbnRJbmZvLCB0eCwgdHkpOwogfQogCi12b2lkIFJlbmRlclZpZXc6OnBhaW50Qm94RGVj
b3JhdGlvbnMoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KQordm9pZCBSZW5kZXJWaWV3
OjpwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0
eSkKIHsKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgYXJlIGVuY2xvc2VkIGJ5IGEgdHJhbnNw
YXJlbnQgbGF5ZXIuICBJZiBzbywgd2UgY2Fubm90IGJsaXQKICAgICAvLyB3aGVuIHNjcm9sbGlu
ZywgYW5kIHdlIG5lZWQgdG8gdXNlIHNsb3cgcmVwYWludHMuCkBAIC0xNjQsNyArMTY0LDcgQEAg
dm9pZCBSZW5kZXJWaWV3OjpwYWludEJveERlY29yYXRpb25zKFBhaQogICAgICAgICBpZiAobGF5
ZXItPmlzVHJhbnNwYXJlbnQoKSB8fCBsYXllci0+dHJhbnNwYXJlbnRBbmNlc3RvcigpKQogICAg
ICAgICAgICAgZnJhbWVWaWV3KCktPnNldFVzZVNsb3dSZXBhaW50cygpOwogICAgIH0KLSAgICAK
KwogICAgIGlmIChlbHQgfHwgKGZpcnN0Q2hpbGQoKSAmJiBmaXJzdENoaWxkKCktPnN0eWxlKCkt
PnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKSB8fCAhdmlldygpKQogICAgICAgICByZXR1cm47CiAK
QEAgLTE3NiwxMiArMTc2LDEyIEBAIHZvaWQgUmVuZGVyVmlldzo6cGFpbnRCb3hEZWNvcmF0aW9u
cyhQYWkKICAgICBlbHNlIHsKICAgICAgICAgQ29sb3IgYmFzZUNvbG9yID0gZnJhbWVWaWV3KCkt
PmJhc2VCYWNrZ3JvdW5kQ29sb3IoKTsKICAgICAgICAgaWYgKGJhc2VDb2xvci5hbHBoYSgpID4g
MCkgewotICAgICAgICAgICAgaS5wLT5zYXZlKCk7Ci0gICAgICAgICAgICBpLnAtPnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKLSAgICAgICAgICAgIGkucC0+ZmlsbFJlY3Qo
aS5yLCBiYXNlQ29sb3IpOwotICAgICAgICAgICAgaS5wLT5yZXN0b3JlKCk7CisgICAgICAgICAg
ICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKKyAgICAgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT5maWxsUmVjdChwYWludEluZm8ucmVjdCwgYmFzZUNvbG9yKTsKKyAg
ICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgaS5wLT5jbGVhclJlY3QoaS5yKTsKKyAgICAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT5jbGVhclJlY3QocGFpbnRJbmZvLnJlY3QpOwogICAgIH0KIH0KIApJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclZpZXcuaAkocmV2aXNpb24gMTc0NDcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDggKzU0LDggQEAgcHVibGljOgogICAg
IAogICAgIHZpcnR1YWwgdm9pZCByZXBhaW50Vmlld1JlY3RhbmdsZShjb25zdCBJbnRSZWN0JiBy
LCBib29sIGltbWVkaWF0ZSA9IGZhbHNlKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiBpLCBpbnQgdHgsIGludCB0eSk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Qm94
RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KTsKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9p
ZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICAK
ICAgICB2b2lkIHNldFNlbGVjdGlvbihSZW5kZXJPYmplY3QgKnMsIGludCBzcCwgUmVuZGVyT2Jq
ZWN0ICplLCBpbnQgZXApOwogICAgIHZvaWQgY2xlYXJTZWxlY3Rpb24oKTsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAkocmV2aXNpb24gMTc0NDcpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJXaWRnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsMjIgKzE2NiwyMiBA
QCB2b2lkIFJlbmRlcldpZGdldDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUgCiAgICAgfQogfQogCi12
b2lkIFJlbmRlcldpZGdldDo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQgdHgsIGludCB0eSkKK3Zv
aWQgUmVuZGVyV2lkZ2V0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQg
dHkpCiB7Ci0gICAgaWYgKCFzaG91bGRQYWludChpLCB0eCwgdHkpKQorICAgIGlmICghc2hvdWxk
UGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpKQogICAgICAgICByZXR1cm47CiAKICAgICB0eCArPSBt
X3g7CiAgICAgdHkgKz0gbV95OwogCi0gICAgaWYgKHNob3VsZFBhaW50QmFja2dyb3VuZE9yQm9y
ZGVyKCkgJiYgaS5waGFzZSAhPSBQYWludFBoYXNlT3V0bGluZSAmJiBpLnBoYXNlICE9IFBhaW50
UGhhc2VTZWxmT3V0bGluZSkgCi0gICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMoaSwgdHgsIHR5
KTsKKyAgICBpZiAoc2hvdWxkUGFpbnRCYWNrZ3JvdW5kT3JCb3JkZXIoKSAmJiBwYWludEluZm8u
cGhhc2UgIT0gUGFpbnRQaGFzZU91dGxpbmUgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhh
c2VTZWxmT3V0bGluZSkgCisgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCB0
eCwgdHkpOwogCi0gICAgaWYgKCFtX3ZpZXcgfHwgaS5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdy
b3VuZCB8fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKKyAgICBpZiAoIW1fdmll
dyB8fCBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgc3R5bGUoKS0+
dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVybjsKIAogI2lmIFBMQVRGT1JN
KE1BQykKLSAgICBpZiAoc3R5bGUoKS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0b20gJiYgIWkucC0+
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIGlmIChzdHlsZSgpLT5oaWdobGlnaHQoKSAhPSBudWxs
QXRvbSAmJiAhcGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cGFpbnRDdXN0b21IaWdobGlnaHQodHggLSBtX3gsIHR5IC0gbV95LCBzdHlsZSgpLT5oaWdobGln
aHQoKSwgdHJ1ZSk7CiAjZW5kaWYKIApAQCAtMTkzLDEyICsxOTMsMTIgQEAgdm9pZCBSZW5kZXJX
aWRnZXQ6OnBhaW50KFBhaW50SW5mbyYgaSwgaQogCiAgICAgICAgIC8vIFRlbGwgdGhlIHdpZGdl
dCB0byBwYWludCBub3cuICBUaGlzIGlzIHRoZSBvbmx5IHRpbWUgdGhlIHdpZGdldCBpcyBhbGxv
d2VkCiAgICAgICAgIC8vIHRvIHBhaW50IGl0c2VsZi4gIFRoYXQgd2F5IGl0IHdpbGwgY29tcG9z
aXRlIHByb3Blcmx5IHdpdGggei1pbmRleGVkIGxheWVycy4KLSAgICAgICAgbV93aWRnZXQtPnBh
aW50KGkucCwgaS5yKTsKKyAgICAgICAgbV93aWRnZXQtPnBhaW50KHBhaW50SW5mby5jb250ZXh0
LCBwYWludEluZm8ucmVjdCk7CiAgICAgfQogCiAgICAgLy8gUGFpbnQgYSBwYXJ0aWFsbHkgdHJh
bnNwYXJlbnQgd2FzaCBvdmVyIHNlbGVjdGVkIHdpZGdldHMuCiAgICAgaWYgKGlzU2VsZWN0ZWQo
KSAmJiAhZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSkKLSAgICAgICAgaS5wLT5maWxsUmVjdChzZWxl
Y3Rpb25SZWN0KCksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKKyAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmZpbGxSZWN0KHNlbGVjdGlvblJlY3QoKSwgc2VsZWN0aW9uQmFja2dyb3Vu
ZENvbG9yKCkpOwogfQogCiB2b2lkIFJlbmRlcldpZGdldDo6Zm9jdXNJbihXaWRnZXQqKQpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgJKHJldmlzaW9uIDE3NDQ3KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDI2ICsyMSwyNSBA
QAogICoKICAqLwogCi0jaWZuZGVmIFJlbmRlcldpZGdldF9ICi0jZGVmaW5lIFJlbmRlcldpZGdl
dF9ICisjaWZuZGVmIFJlbmRlcldpZGdldF9oCisjZGVmaW5lIFJlbmRlcldpZGdldF9oCiAKICNp
bmNsdWRlICJSZW5kZXJSZXBsYWNlZC5oIgogI2luY2x1ZGUgIldpZGdldENsaWVudC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFJlbmRlcldpZGdldCA6IHB1YmxpYyBSZW5kZXJS
ZXBsYWNlZCwgcHVibGljIFdpZGdldENsaWVudAoteworY2xhc3MgUmVuZGVyV2lkZ2V0IDogcHVi
bGljIFJlbmRlclJlcGxhY2VkLCBwdWJsaWMgV2lkZ2V0Q2xpZW50IHsKIHB1YmxpYzoKICAgICBS
ZW5kZXJXaWRnZXQoTm9kZSopOwogICAgIHZpcnR1YWwgflJlbmRlcldpZGdldCgpOwogCisgICAg
dmlydHVhbCBib29sIGlzV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfTsKKwogICAgIHZp
cnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSopOwogCiAgICAgdmlydHVhbCB2b2lkIHBh
aW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc1dp
ZGdldCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH07Ci0KICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eSgpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoICk7CiAKQEAgLTQ4LDcgKzQ3LDcgQEAgcHVi
bGljOgogCiAgICAgUmVuZGVyQXJlbmEqIHJlZigpIHsgKyttX3JlZkNvdW50OyByZXR1cm4gcmVu
ZGVyQXJlbmEoKTsgfQogICAgIHZvaWQgZGVyZWYoUmVuZGVyQXJlbmEqKTsKLSAgICAKKwogICAg
IHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlV2lkZ2V0UG9zaXRpb24oKTsKQEAgLTcyLDEwICs3MSwxMSBAQCBw
cml2YXRlOgogcHJvdGVjdGVkOgogICAgIFdpZGdldCogbV93aWRnZXQ7CiAgICAgRnJhbWVWaWV3
KiBtX3ZpZXc7CisKIHByaXZhdGU6CiAgICAgaW50IG1fcmVmQ291bnQ7CiB9OwogCi19Cit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8vIFJlbmRlcldpZGdldF9oCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gMTc0NDcpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTks
MTEgKzk5LDExIEBAIGludCBSb290SW5saW5lQm94OjpwbGFjZUVsbGlwc2lzQm94KGJvb2wKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50RWxsaXBzaXNC
b3goUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpIGNvbnN0Cit2
b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50RWxsaXBzaXNCb3goUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZWxsaXBz
aXNCb3ggJiYgb2JqZWN0KCktPnNob3VsZFBhaW50V2l0aGluUm9vdChpKSAmJiBvYmplY3QoKS0+
c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUgJiYKLSAgICAgICAgaS5waGFzZSA9PSBQ
YWludFBoYXNlRm9yZWdyb3VuZCkKLSAgICAgICAgbV9lbGxpcHNpc0JveC0+cGFpbnQoaSwgX3R4
LCBfdHkpOworICAgIGlmIChtX2VsbGlwc2lzQm94ICYmIG9iamVjdCgpLT5zaG91bGRQYWludFdp
dGhpblJvb3QocGFpbnRJbmZvKSAmJiBvYmplY3QoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09
IFZJU0lCTEUgJiYKKyAgICAgICAgICAgIHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9y
ZWdyb3VuZCkKKyAgICAgICAgbV9lbGxpcHNpc0JveC0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkp
OwogfQogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMTE4LDI3ICsxMTgsMjcgQEAgdm9pZCBSb290
SW5saW5lQm94OjphZGRIaWdobGlnaHRPdmVyZmxvdwogICAgIG1fYm90dG9tT3ZlcmZsb3cgPSBt
YXgobV9ib3R0b21PdmVyZmxvdywgaW5mbGF0ZWRSZWN0LmJvdHRvbSgpKTsKIH0KIAotdm9pZCBS
b290SW5saW5lQm94OjpwYWludEN1c3RvbUhpZ2hsaWdodChSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgaSwgaW50IHR4LCBpbnQgdHksIGNvbnN0IEF0b21pY1N0cmluZyYgaGlnaGxpZ2h0VHlwZSkK
K3ZvaWQgUm9vdElubGluZUJveDo6cGFpbnRDdXN0b21IaWdobGlnaHQoUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHksIGNvbnN0IEF0b21pY1N0cmluZyYg
aGlnaGxpZ2h0VHlwZSkKIHsKLSAgICBpZiAoIW9iamVjdCgpLT5zaG91bGRQYWludFdpdGhpblJv
b3QoaSkgfHwgb2JqZWN0KCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8IGku
cGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCisgICAgaWYgKCFvYmplY3QoKS0+c2hvdWxk
UGFpbnRXaXRoaW5Sb290KHBhaW50SW5mbykgfHwgb2JqZWN0KCktPnN0eWxlKCktPnZpc2liaWxp
dHkoKSAhPSBWSVNJQkxFIHx8IHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3Vu
ZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gR2V0IHRoZSBpbmZsYXRlZCByZWN0IHNvIHRo
YXQgd2UgY2FuIHByb3Blcmx5IGhpdCB0ZXN0LgogICAgIEZsb2F0UmVjdCByb290UmVjdCh0eCAr
IHhQb3MoKSwgdHkgKyBzZWxlY3Rpb25Ub3AoKSwgd2lkdGgoKSwgc2VsZWN0aW9uSGVpZ2h0KCkp
OwogICAgIEZsb2F0UmVjdCBpbmZsYXRlZFJlY3QgPSBNYWMob2JqZWN0KCktPmRvY3VtZW50KCkt
PmZyYW1lKCkpLT5jdXN0b21IaWdobGlnaHRMaW5lUmVjdChoaWdobGlnaHRUeXBlLCByb290UmVj
dCk7Ci0gICAgaWYgKGluZmxhdGVkUmVjdC5pbnRlcnNlY3RzKGkucikpCisgICAgaWYgKGluZmxh
dGVkUmVjdC5pbnRlcnNlY3RzKHBhaW50SW5mby5yZWN0KSkKICAgICAgICAgTWFjKG9iamVjdCgp
LT5kb2N1bWVudCgpLT5mcmFtZSgpKS0+cGFpbnRDdXN0b21IaWdobGlnaHQoaGlnaGxpZ2h0VHlw
ZSwgcm9vdFJlY3QsIHJvb3RSZWN0LCBmYWxzZSwgdHJ1ZSk7CiB9CiAjZW5kaWYKIAotdm9pZCBS
b290SW5saW5lQm94OjpwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IHR4LCBp
bnQgdHkpCit2b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogewotICAgIElubGluZUZsb3dCb3g6OnBhaW50
KGksIHR4LCB0eSk7Ci0gICAgcGFpbnRFbGxpcHNpc0JveChpLCB0eCwgdHkpOworICAgIElubGlu
ZUZsb3dCb3g6OnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKKyAgICBwYWludEVsbGlwc2lzQm94
KHBhaW50SW5mbywgdHgsIHR5KTsKICNpZiBQTEFURk9STShNQUMpCiAgICAgUmVuZGVyU3R5bGUq
IHN0eWxlVG9Vc2UgPSBvYmplY3QoKS0+c3R5bGUobV9maXJzdExpbmUpOwotICAgIGlmIChzdHls
ZVRvVXNlLT5oaWdobGlnaHQoKSAhPSBudWxsQXRvbSAmJiAhaS5wLT5wYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHBhaW50Q3VzdG9tSGlnaGxpZ2h0KGksIHR4LCB0eSwgc3R5bGVUb1VzZS0+
aGlnaGxpZ2h0KCkpOworICAgIGlmIChzdHlsZVRvVXNlLT5oaWdobGlnaHQoKSAhPSBudWxsQXRv
bSAmJiAhcGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcGFp
bnRDdXN0b21IaWdobGlnaHQocGFpbnRJbmZvLCB0eCwgdHksIHN0eWxlVG9Vc2UtPmhpZ2hsaWdo
dCgpKTsKICNlbmRpZgogfQogCkBAIC0xNzYsNyArMTc2LDcgQEAgdm9pZCBSb290SW5saW5lQm94
OjpjaGlsZFJlbW92ZWQoSW5saW5lQgogfQogCiBHYXBSZWN0cyBSb290SW5saW5lQm94OjpmaWxs
TGluZVNlbGVjdGlvbkdhcChpbnQgc2VsVG9wLCBpbnQgc2VsSGVpZ2h0LCBSZW5kZXJCbG9jayog
cm9vdEJsb2NrLCBpbnQgYmxvY2tYLCBpbnQgYmxvY2tZLCBpbnQgdHgsIGludCB0eSwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyogaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvKiBwYWludEluZm8pCiB7CiAgICAg
R2FwUmVjdHMgcmVzdWx0OwogICAgIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgbGluZVN0
YXRlID0gc2VsZWN0aW9uU3RhdGUoKTsKQEAgLTE4OSwxMSArMTg5LDExIEBAIEdhcFJlY3RzIFJv
b3RJbmxpbmVCb3g6OmZpbGxMaW5lU2VsZWN0aW8KICAgICBpZiAobGVmdEdhcCkKICAgICAgICAg
cmVzdWx0LnVuaXRlTGVmdChibG9jaygpLT5maWxsTGVmdFNlbGVjdGlvbkdhcChmaXJzdEJveC0+
cGFyZW50KCktPm9iamVjdCgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaXJzdEJveC0+eFBvcygpLCBzZWxUb3AsIHNlbEhlaWdodCwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgdHgsIHR5LCBpKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdEJsb2NrLCBibG9ja1gs
IGJsb2NrWSwgdHgsIHR5LCBwYWludEluZm8pKTsKICAgICBpZiAocmlnaHRHYXApCiAgICAgICAg
IHJlc3VsdC51bml0ZVJpZ2h0KGJsb2NrKCktPmZpbGxSaWdodFNlbGVjdGlvbkdhcChsYXN0Qm94
LT5wYXJlbnQoKS0+b2JqZWN0KCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEJveC0+eFBvcygpICsgbGFzdEJveC0+d2lkdGgo
KSwgc2VsVG9wLCBzZWxIZWlnaHQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgdHgsIHR5
LCBpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByb290QmxvY2ssIGJsb2NrWCwgYmxvY2tZLCB0eCwgdHksIHBhaW50SW5mbykpOwog
CiAgICAgaWYgKGZpcnN0Qm94ICYmIGZpcnN0Qm94ICE9IGxhc3RCb3gpIHsKICAgICAgICAgLy8g
Tm93IGZpbGwgaW4gYW55IGdhcHMgb24gdGhlIGxpbmUgdGhhdCBvY2N1cnJlZCBiZXR3ZWVuIHR3
byBzZWxlY3RlZCBlbGVtZW50cy4KQEAgLTIwMiwxNCArMjAyLDE0IEBAIEdhcFJlY3RzIFJvb3RJ
bmxpbmVCb3g6OmZpbGxMaW5lU2VsZWN0aW8KICAgICAgICAgICAgIGlmIChib3gtPnNlbGVjdGlv
blN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKSB7CiAgICAgICAgICAgICAg
ICAgcmVzdWx0LnVuaXRlQ2VudGVyKGJsb2NrKCktPmZpbGxIb3Jpem9udGFsU2VsZWN0aW9uR2Fw
KGJveC0+cGFyZW50KCktPm9iamVjdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0WCArIHR4LCBzZWxU
b3AgKyB0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm94LT54UG9zKCkgLSBsYXN0WCwgc2VsSGVpZ2h0LCBp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJveC0+eFBvcygpIC0gbGFzdFgsIHNlbEhlaWdodCwgcGFpbnRJ
bmZvKSk7CiAgICAgICAgICAgICAgICAgbGFzdFggPSBib3gtPnhQb3MoKSArIGJveC0+d2lkdGgo
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChib3ggPT0gbGFzdEJveCkKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAgICAgIAorCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24g
MTc0NDcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg4LDggKzg4LDggQEAgcHVibGljOgogCiAgICAgRWxsaXBzaXNCb3gqIGVsbGlwc2lz
Qm94KCkgY29uc3QgeyByZXR1cm4gbV9lbGxpcHNpc0JveDsgfQogCi0gICAgdm9pZCBwYWludEVs
bGlwc2lzQm94KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgaW50IF90eCwgaW50IF90eSkgY29u
c3Q7Ci0gICAgYm9vbCBoaXRUZXN0RWxsaXBzaXNCb3goSGl0VGVzdFJlc3VsdCYsIGludCBfeCwg
aW50IF95LCBpbnQgX3R4LCBpbnQgX3R5LCBIaXRUZXN0QWN0aW9uLCBib29sKTsKKyAgICB2b2lk
IHBhaW50RWxsaXBzaXNCb3goUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBpbnQgdHgsIGludCB0
eSkgY29uc3Q7CisgICAgYm9vbCBoaXRUZXN0RWxsaXBzaXNCb3goSGl0VGVzdFJlc3VsdCYsIGlu
dCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24sIGJvb2wpOwogICAgIAog
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclRydW5jYXRpb24oKTsKIApAQCAtOTgsNyArOTgsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBwYWludEN1c3RvbUhpZ2hsaWdodChSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYsIGludCB0eCwgaW50IHR5LCBjb25zdCBBdG9taWNTdHJpbmcmIGhpZ2hsaWdodFR5cGUp
OwogI2VuZGlmCiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mIGksIGludCBfdHgsIGludCBfdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0UG9pbnQoSGl0VGVzdFJlc3VsdCYsIGludCwgaW50LCBpbnQsIGludCk7CiAKICAgICBib29s
IGhhc1NlbGVjdGVkQ2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2hhc1NlbGVjdGVkQ2hpbGRy
ZW47IH0KQEAgLTEwNywxMCArMTA3LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlbmRlck9i
amVjdDo6U2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKTsKICAgICBJbmxpbmVCb3gqIGZp
cnN0U2VsZWN0ZWRCb3goKTsKICAgICBJbmxpbmVCb3gqIGxhc3RTZWxlY3RlZEJveCgpOwotICAg
IAorCiAgICAgR2FwUmVjdHMgZmlsbExpbmVTZWxlY3Rpb25HYXAoaW50IHNlbFRvcCwgaW50IHNl
bEhlaWdodCwgUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IGJsb2NrWCwgaW50IGJsb2NrWSwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR4LCBpbnQgdHksIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvKik7Ci0gICAgCisKICAgICBSZW5kZXJCbG9jayogYmxv
Y2soKSBjb25zdDsKIAogICAgIGludCBzZWxlY3Rpb25Ub3AoKTsKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1NWR0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1NWR0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxNzQ0NykKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1NWR0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw0MyArNTks
NDIgQEAgdm9pZCBTVkdJbmxpbmVGbG93Qm94Ojp2ZXJ0aWNhbGx5QWxpZ25CbwogCiB2b2lkIHBh
aW50U1ZHSW5saW5lRmxvdyhJbmxpbmVGbG93Qm94KiBmbG93LCBSZW5kZXJPYmplY3QqIG9iamVj
dCwgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7
Ci0gICAgaWYgKHBhaW50SW5mby5wLT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKHBhaW50
SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAK
ICAgICBLUmVuZGVyaW5nRGV2aWNlKiBkZXZpY2UgPSByZW5kZXJpbmdEZXZpY2UoKTsKICAgICBL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dCogY29udGV4dCA9IGRldmljZS0+Y3VycmVudENvbnRleHQo
KTsKICAgICBib29sIHNob3VsZFBvcENvbnRleHQgPSBmYWxzZTsKICAgICBpZiAoY29udGV4dCkK
LSAgICAgICAgcGFpbnRJbmZvLnAtPnNhdmUoKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PnNhdmUoKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gTmVlZCB0byBzZXQgdXAgS0NhbnZhcyBy
ZW5kZXJpbmcgaWYgaXQgaGFzbid0IGFscmVhZHkgYmVlbiBkb25lLgotICAgICAgICBjb250ZXh0
ID0gcGFpbnRJbmZvLnAtPmNyZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRleHQoKTsKKyAgICAgICAg
Y29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5jcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0
KCk7CiAgICAgICAgIGRldmljZS0+cHVzaENvbnRleHQoY29udGV4dCk7CiAgICAgICAgIHNob3Vs
ZFBvcENvbnRleHQgPSB0cnVlOwogICAgIH0KLSAgICAKIAogICAgIGNvbnRleHQtPmNvbmNhdENU
TShvYmplY3QtPmxvY2FsVHJhbnNmb3JtKCkpOwotICAgIAotICAgIEZsb2F0UmVjdCBib3VuZGlu
Z0JveCh0eCtmbG93LT54UG9zKCkgLCB0eStmbG93LT55UG9zKCksIGZsb3ctPndpZHRoKCksIGZs
b3ctPmhlaWdodCgpKTsKLSAgICAKKworICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCh0eCArIGZs
b3ctPnhQb3MoKSwgdHkgKyBmbG93LT55UG9zKCksIGZsb3ctPndpZHRoKCksIGZsb3ctPmhlaWdo
dCgpKTsKKwogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IG9iamVjdC0+c3R5
bGUoKS0+c3ZnU3R5bGUoKTsKICAgICBpZiAoS0NhbnZhc0NsaXBwZXIqIGNsaXBwZXIgPSBnZXRD
bGlwcGVyQnlJZChvYmplY3QtPmRvY3VtZW50KCksIHN2Z1N0eWxlLT5jbGlwUGF0aCgpLnN1YnN0
cmluZygxKSkpCiAgICAgICAgIGNsaXBwZXItPmFwcGx5Q2xpcChib3VuZGluZ0JveCk7Ci0gICAg
CisKICAgICBpZiAoS0NhbnZhc01hc2tlciogbWFza2VyID0gZ2V0TWFza2VyQnlJZChvYmplY3Qt
PmRvY3VtZW50KCksIHN2Z1N0eWxlLT5tYXNrRWxlbWVudCgpLnN1YnN0cmluZygxKSkpCiAgICAg
ICAgIG1hc2tlci0+YXBwbHlNYXNrKGJvdW5kaW5nQm94KTsKLSAgICAKKwogICAgIEtDYW52YXNG
aWx0ZXIqIGZpbHRlciA9IGdldEZpbHRlckJ5SWQob2JqZWN0LT5kb2N1bWVudCgpLCBzdmdTdHls
ZS0+ZmlsdGVyKCkuc3Vic3RyaW5nKDEpKTsKICAgICBpZiAoZmlsdGVyKQogICAgICAgICBmaWx0
ZXItPnByZXBhcmVGaWx0ZXIoYm91bmRpbmdCb3gpOwotICAgIAorCiAgICAgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8gcGkgPSBwYWludEluZm87CiAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4g
YyhkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCktPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKLSAg
ICBwaS5wID0gYy5nZXQoKTsKKyAgICBwaS5jb250ZXh0ID0gYy5nZXQoKTsKICAgICBpZiAoIWZs
b3ctPmlzUm9vdElubGluZUJveCgpKQotICAgICAgICBwaS5yID0gKG9iamVjdC0+bG9jYWxUcmFu
c2Zvcm0oKSkuaW52ZXJ0KCkubWFwUmVjdChwYWludEluZm8ucik7Ci0gICAgCisgICAgICAgIHBp
LnJlY3QgPSAob2JqZWN0LT5sb2NhbFRyYW5zZm9ybSgpKS5pbnZlcnQoKS5tYXBSZWN0KHBhaW50
SW5mby5yZWN0KTsKKwogICAgIGZsb2F0IG9wYWNpdHkgPSBvYmplY3QtPnN0eWxlKCktPm9wYWNp
dHkoKTsKICAgICBpZiAob3BhY2l0eSA8IDEuMGYpIHsKICAgICAgICAgYy0+Y2xpcChlbmNsb3Np
bmdJbnRSZWN0KGJvdW5kaW5nQm94KSk7CkBAIC0xMjAsMTYgKzExOSwxNiBAQCB2b2lkIHBhaW50
U1ZHSW5saW5lRmxvdyhJbmxpbmVGbG93Qm94KiBmCiAgICAgICAgIH0KICAgICAgICAgc3Ryb2tl
UGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dChmYWxzZSk7CiAgICAgfQotICAgIAorCiAgICAg
aWYgKGZpbHRlcikgCiAgICAgICAgIGZpbHRlci0+YXBwbHlGaWx0ZXIoYm91bmRpbmdCb3gpOwot
ICAgIAorCiAgICAgaWYgKG9wYWNpdHkgPCAxLjBmKQogICAgICAgICBjLT5lbmRUcmFuc3BhcmVu
Y3lMYXllcigpOwogCiAgICAgLy8gcmVzdG9yZSBkcmF3aW5nIHN0YXRlCiAgICAgaWYgKCFzaG91
bGRQb3BDb250ZXh0KQotICAgICAgICBwYWludEluZm8ucC0+cmVzdG9yZSgpOworICAgICAgICBw
YWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogICAgIGVsc2UgewogICAgICAgICBkZXZpY2Ut
PnBvcENvbnRleHQoKTsKICAgICAgICAgZGVsZXRlIGNvbnRleHQ7Cg==
</data>
<flag name="review"
          id="3922"
          type_id="1"
          status="-"
          setter="mitz"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11327</attachid>
            <date>2006-11-01 08:09:44 -0800</date>
            <delta_ts>2006-11-01 08:27:16 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>paintInfo2.diff</filename>
            <type>text/plain</type>
            <size>207073</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNzUxNikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTgwIEBACisyMDA2LTExLTAxICBTYW0gV2VpbmlnICA8c2FtLndlaW5pZ0BnbWFp
bC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Rml4IGZvciBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ3NAorICAg
ICAgICBSZW5hbWUgdGhlICJwIiBtZW1iZXIgdmFyaWFibGUgb2YgdGhlIFBhaW50SW5mbyBzdHJ1
Y3QgdG8gImNvbnRleHQiCisKKyAgICAgICAgLSBSZW5hbWVzIHRoZSAncCcgYW5kICdyJyBtZW1i
ZXIgdmFyaWFibGVzIG9mIHRoZSBQYWludEluZm8gc3RydWN0IHRvCisgICAgICAgICAgJ2NvbnRl
eHQnIGFuZCAncmVjdCcgcmVzcGVjdGl2ZWx5LgorCisgICAgICAgIC0gQXNzb3J0ZWQgc3Vycm91
bmRpbmcgY2xlYW51cHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvRWxsaXBzaXNCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnBhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnBhaW50QmFja2dyb3VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpwYWludEJhY2tncm91bmRBbmRCb3JkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGFpbnREZWNvcmF0aW9ucyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
SW5saW5lUnVuQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9JbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6cGFpbnRDYXJldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFp
bnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50RmxvYXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpwYWludEVsbGlwc2lzQm94ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50U2VsZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpmaWxsU2VsZWN0aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6ZmlsbElubGluZVNlbGVjdGlvbkdhcHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmZpbGxCbG9ja1NlbGVjdGlvbkdhcHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmZpbGxIb3Jpem9udGFsU2VsZWN0aW9uR2FwKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpmaWxsVmVydGljYWxTZWxlY3Rpb25HYXApOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmZpbGxMZWZ0U2VsZWN0aW9uR2FwKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpmaWxsUmlnaHRTZWxlY3Rpb25HYXApOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYWlu
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBhaW50Um9vdEJveERlY29yYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCdXR0b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjpwYWludE9iamVj
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZpZWxkc2V0OjpwYWludEJveERlY29yYXRpb25zKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWN0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93Ojpjb250aW51
YXRpb25CZWZvcmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvdzo6YWRkQ2hpbGRXaXRo
Q29udGludWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3c6OmFkZENoaWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3c6OmF0dGFjaExpbmVCb3gpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRmxvdzo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
bG93OjpkaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGbG93OjpkaXJ0eUxpbmVCb3hlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93Ojpj
cmVhdGVJbmxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvdzo6cGFpbnRMaW5l
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93OjpnZXRBYnNvbHV0ZVJlcGFpbnRSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3c6Omxvd2VzdFBvc2l0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckZsb3c6OnJpZ2h0bW9zdFBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZsb3c6OmxlZnRtb3N0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRmxvdzo6Y2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3c6OmFk
ZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3c6OnBhaW50T3V0
bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93OjpwYWludE91dGxpbmVGb3JMaW5l
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJGb3JlaWduT2JqZWN0OjpwYWludCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckhUTUxDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySFRNTENh
bnZhczo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXll
cik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGlzdEJveDo6cGFpbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGlzdEJveDo6cGFpbnRTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlz
dEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0
Qm94OjpwYWludEl0ZW1CYWNrZ3JvdW5kKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0TWFya2VyOjpwYWludCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck1lbnVMaXN0OjpwYWludE9iamVjdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnBhaW50KToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbzo6UGFpbnRJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OnBhaW50aW5nUm9vdEZvckNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6c2hvdWxkUGFpbnRXaXRoaW5Sb290KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6cHJpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclBhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6cGFpbnQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSZXBsYWNlZDo6c2hvdWxkUGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJT
VkdDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpw
YWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJTVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdJbWFnZTo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OnBhaW50KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4
dDo6cmVuZGVyTmFtZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZTo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlQ2VsbDo6cGFpbnRCYWNrZ3JvdW5kc0JlaGluZENlbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYWludEJveERlY29yYXRpb25zKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRhYmxlUm93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93OjpwYWlu
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93Lmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
YWJsZVNlY3Rpb246OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmdldEJhc2VsaW5l
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6c2V0TmVlZENlbGxSZWNh
bGMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0OjpyZW5kZXJOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6
OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmVsZW1lbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50Qm9yZGVy
T25seSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnREZWNvcmF0aW9ucyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmg6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZTo6UmVuZGVyVGhlbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6
On5SZW5kZXJUaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6Y29udHJvbFN1
cHBvcnRzVGludHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFkanVzdFJlcGFp
bnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjp0aGVtZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnN1cHBvcnRzSG92ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50Q2hlY2tib3gpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZTo6cGFpbnRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2V0UmFk
aW9TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpwYWludEJ1dHRvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6c2V0QnV0dG9uU2l6ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWU6OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWU6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBhaW50
TWVudUxpc3RCdXR0b24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludENoZWNrYm94KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFJhZGlvKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lTWFjOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVNYWM6OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6
OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50
TWVudUxpc3RCdXR0b25HcmFkaWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVN
YWM6OnBhaW50TWVudUxpc3RCdXR0b24pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnBhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclZpZXc6OnBhaW50Qm94RGVjb3JhdGlvbnMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnBhaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyV2lkZ2V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6Omlz
V2lkZ2V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSb290SW5saW5lQm94OjpwYWludEVsbGlwc2lzQm94KToKKyAgICAgICAgKFdl
YkNvcmU6OlJvb3RJbmxpbmVCb3g6OnBhaW50Q3VzdG9tSGlnaGxpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJvb3RJbmxpbmVCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxp
bmVCb3g6OmZpbGxMaW5lU2VsZWN0aW9uR2FwKToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElu
bGluZUJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnBhaW50U1ZHSW5saW5lRmxvdyk6CisKIDIwMDYtMTEtMDEgIERhdmlk
IEtpbHplciAgPGRka2lsemVyQGtpbHplci5uZXQ+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWl0
ei4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHJldmlzaW9uIDE3NTE2KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwz
NSArMjksMzUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEVsbGlwc2lzQm94Ojpw
YWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSkKK3ZvaWQg
RWxsaXBzaXNCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGlu
dCB0eCwgaW50IHR5KQogewotICAgIEdyYXBoaWNzQ29udGV4dCogcCA9IGkucDsKLSAgICBSZW5k
ZXJTdHlsZSogX3N0eWxlID0gbV9maXJzdExpbmUgPyBtX29iamVjdC0+Zmlyc3RMaW5lU3R5bGUo
KSA6IG1fb2JqZWN0LT5zdHlsZSgpOwotICAgIGlmIChfc3R5bGUtPmZvbnQoKSAhPSBwLT5mb250
KCkpCi0gICAgICAgIHAtPnNldEZvbnQoX3N0eWxlLT5mb250KCkpOwotCi0gICAgQ29sb3IgdGV4
dENvbG9yID0gX3N0eWxlLT5jb2xvcigpOwotICAgIGlmICh0ZXh0Q29sb3IgIT0gcC0+cGVuKCku
Y29sb3IoKSkKLSAgICAgICAgcC0+c2V0UGVuKHRleHRDb2xvcik7CisgICAgR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CisgICAgUmVuZGVyU3R5bGUqIHN0eWxl
ID0gbV9vYmplY3QtPnN0eWxlKG1fZmlyc3RMaW5lKTsKKyAgICBpZiAoc3R5bGUtPmZvbnQoKSAh
PSBjb250ZXh0LT5mb250KCkpCisgICAgICAgIGNvbnRleHQtPnNldEZvbnQoc3R5bGUtPmZvbnQo
KSk7CisKKyAgICBDb2xvciB0ZXh0Q29sb3IgPSBzdHlsZS0+Y29sb3IoKTsKKyAgICBpZiAodGV4
dENvbG9yICE9IGNvbnRleHQtPnBlbigpLmNvbG9yKCkpCisgICAgICAgIGNvbnRleHQtPnNldFBl
bih0ZXh0Q29sb3IpOwogICAgIGJvb2wgc2V0U2hhZG93ID0gZmFsc2U7Ci0gICAgaWYgKF9zdHls
ZS0+dGV4dFNoYWRvdygpKSB7Ci0gICAgICAgIHAtPnNldFNoYWRvdyhJbnRTaXplKF9zdHlsZS0+
dGV4dFNoYWRvdygpLT54LCBfc3R5bGUtPnRleHRTaGFkb3coKS0+eSksCi0gICAgICAgICAgICAg
ICAgICAgICBfc3R5bGUtPnRleHRTaGFkb3coKS0+Ymx1ciwgX3N0eWxlLT50ZXh0U2hhZG93KCkt
PmNvbG9yKTsKKyAgICBpZiAoc3R5bGUtPnRleHRTaGFkb3coKSkgeworICAgICAgICBjb250ZXh0
LT5zZXRTaGFkb3coSW50U2l6ZShzdHlsZS0+dGV4dFNoYWRvdygpLT54LCBzdHlsZS0+dGV4dFNo
YWRvdygpLT55KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT50ZXh0U2hhZG93
KCktPmJsdXIsIHN0eWxlLT50ZXh0U2hhZG93KCktPmNvbG9yKTsKICAgICAgICAgc2V0U2hhZG93
ID0gdHJ1ZTsKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcmIHN0ciA9IG1fc3RyOwotICAgIFRl
eHRTdHlsZSB0ZXh0U3R5bGUoMCwgMCwgMCwgZmFsc2UsIF9zdHlsZS0+dmlzdWFsbHlPcmRlcmVk
KCkpOwotICAgIHAtPmRyYXdUZXh0KFRleHRSdW4oc3RyLmltcGwoKSksIEludFBvaW50KG1feCAr
IF90eCwgbV95ICsgX3R5ICsgbV9iYXNlbGluZSksIHRleHRTdHlsZSk7CisgICAgVGV4dFN0eWxl
IHRleHRTdHlsZSgwLCAwLCAwLCBmYWxzZSwgc3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpKTsKKyAg
ICBjb250ZXh0LT5kcmF3VGV4dChUZXh0UnVuKHN0ci5pbXBsKCkpLCBJbnRQb2ludChtX3ggKyB0
eCwgbV95ICsgdHkgKyBtX2Jhc2VsaW5lKSwgdGV4dFN0eWxlKTsKIAogICAgIGlmIChzZXRTaGFk
b3cpCi0gICAgICAgIHAtPmNsZWFyU2hhZG93KCk7CisgICAgICAgIGNvbnRleHQtPmNsZWFyU2hh
ZG93KCk7CiAKICAgICBpZiAobV9tYXJrdXBCb3gpIHsKICAgICAgICAgLy8gUGFpbnQgdGhlIG1h
cmt1cCBib3gKLSAgICAgICAgX3R4ICs9IG1feCArIG1fd2lkdGggLSBtX21hcmt1cEJveC0+eFBv
cygpOwotICAgICAgICBfdHkgKz0gbV95ICsgbV9iYXNlbGluZSAtIChtX21hcmt1cEJveC0+eVBv
cygpICsgbV9tYXJrdXBCb3gtPmJhc2VsaW5lKCkpOwotICAgICAgICBtX21hcmt1cEJveC0+cGFp
bnQoaSwgX3R4LCBfdHkpOworICAgICAgICB0eCArPSBtX3ggKyBtX3dpZHRoIC0gbV9tYXJrdXBC
b3gtPnhQb3MoKTsKKyAgICAgICAgdHkgKz0gbV95ICsgbV9iYXNlbGluZSAtIChtX21hcmt1cEJv
eC0+eVBvcygpICsgbV9tYXJrdXBCb3gtPmJhc2VsaW5lKCkpOworICAgICAgICBtX21hcmt1cEJv
eC0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvRWxsaXBzaXNCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9F
bGxpcHNpc0JveC5oCShyZXZpc2lvbiAxNzUxNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0VsbGlw
c2lzQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDggKzE5LDggQEAKICAqIEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBLgogICovCiAKLSNpZm5kZWYgRWxsaXBzaXNCb3hfSAotI2RlZmluZSBF
bGxpcHNpc0JveF9ICisjaWZuZGVmIEVsbGlwc2lzQm94X2gKKyNkZWZpbmUgRWxsaXBzaXNCb3hf
aAogCiAjaW5jbHVkZSAiSW5saW5lQm94LmgiCiAKQEAgLTM5LDkgKzM5LDkgQEAgcHVibGljOgog
ICAgICAgICAsIG1fbWFya3VwQm94KG1hcmt1cEJveCkKICAgICB7CiAgICAgfQotICAgIAotICAg
IHZpcnR1YWwgdm9pZCBwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGludCBfdHgsIGlu
dCBfdHkpOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBpbnQgdHgs
IGludCB0eSk7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHkpOwogCiBw
cml2YXRlOgogICAgIEF0b21pY1N0cmluZyBtX3N0cjsKQEAgLTUwLDQgKzUwLDQgQEAgcHJpdmF0
ZToKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRWxsaXBzaXNCb3hfSAor
I2VuZGlmIC8vIEVsbGlwc2lzQm94X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAkocmV2
aXNpb24gMTc1MTYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjUsMTcgKzEyNSwxNyBAQCB2b2lkIElubGluZUJveDo6YWRqdXN0UG9zaXRp
b24oaW50IGR4LCBpCiAgICAgICAgIG1fb2JqZWN0LT5zZXRQb3MobV9vYmplY3QtPnhQb3MoKSAr
IGR4LCBtX29iamVjdC0+eVBvcygpICsgZHkpOwogfQogCi12b2lkIElubGluZUJveDo6cGFpbnQo
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGludCB0eCwgaW50IHR5KQordm9pZCBJbmxpbmVC
b3g6OnBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50
IHR5KQogewotICAgIGlmICghb2JqZWN0KCktPnNob3VsZFBhaW50V2l0aGluUm9vdChpKSB8fCAo
aS5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCAmJiBpLnBoYXNlICE9IFBhaW50UGhhc2VT
ZWxlY3Rpb24pKQorICAgIGlmICghb2JqZWN0KCktPnNob3VsZFBhaW50V2l0aGluUm9vdChwYWlu
dEluZm8pIHx8IChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgJiYgcGFp
bnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24pKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBQYWludCBhbGwgcGhhc2VzIG9mIHJlcGxhY2VkIGVsZW1lbnRzIGF0b21pY2FsbHks
IGFzIHRob3VnaCB0aGUgcmVwbGFjZWQgZWxlbWVudCBlc3RhYmxpc2hlZCBpdHMKICAgICAvLyBv
d24gc3RhY2tpbmcgY29udGV4dC4gIChTZWUgQXBwZW5kaXggRS4yLCBzZWN0aW9uIDYuNCBvbiBp
bmxpbmUgYmxvY2svdGFibGUgZWxlbWVudHMgaW4gdGhlIENTUzIuMQogICAgIC8vIHNwZWNpZmlj
YXRpb24uKQotICAgIGJvb2wgcGFpbnRTZWxlY3Rpb25Pbmx5ID0gaS5waGFzZSA9PSBQYWludFBo
YXNlU2VsZWN0aW9uOwotICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIGluZm8oaSk7Ci0gICAg
aW5mby5waGFzZSA9IHBhaW50U2VsZWN0aW9uT25seSA/IGkucGhhc2UgOiBQYWludFBoYXNlQmxv
Y2tCYWNrZ3JvdW5kOworICAgIGJvb2wgcGFpbnRTZWxlY3Rpb25Pbmx5ID0gcGFpbnRJbmZvLnBo
YXNlID09IFBhaW50UGhhc2VTZWxlY3Rpb247CisgICAgUmVuZGVyT2JqZWN0OjpQYWludEluZm8g
aW5mbyhwYWludEluZm8pOworICAgIGluZm8ucGhhc2UgPSBwYWludFNlbGVjdGlvbk9ubHkgPyBw
YWludEluZm8ucGhhc2UgOiBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kOwogICAgIG9iamVjdCgp
LT5wYWludChpbmZvLCB0eCwgdHkpOwogICAgIGlmICghcGFpbnRTZWxlY3Rpb25Pbmx5KSB7CiAg
ICAgICAgIGluZm8ucGhhc2UgPSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzOwpJbmRl
eDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDE3NTE2KQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0Mywz
MiArNTQzLDMwIEBAIGJvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGkKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnQoUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIGksIGludCB0eCwgaW50IHR5KQordm9pZCBJbmxpbmVGbG93Qm94Ojpw
YWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkK
IHsKLSAgICBpbnQgeFBvcyA9IHR4ICsgbV94IC0gb2JqZWN0KCktPm1heGltYWxPdXRsaW5lU2l6
ZShpLnBoYXNlKTsKLSAgICBpbnQgdyA9IHdpZHRoKCkgKyAyICogb2JqZWN0KCktPm1heGltYWxP
dXRsaW5lU2l6ZShpLnBoYXNlKTsKLSAgICBib29sIGludGVyc2VjdHNEYW1hZ2VSZWN0ID0geFBv
cyA8IGkuci5yaWdodCgpICYmIHhQb3MgKyB3ID4gaS5yLngoKTsKLSAgICAKLSAgICBpZiAoaW50
ZXJzZWN0c0RhbWFnZVJlY3QgJiYgaS5waGFzZSAhPSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lcykg
ewotICAgICAgICBpZiAoaS5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBpLnBoYXNlID09
IFBhaW50UGhhc2VTZWxmT3V0bGluZSkgeworICAgIGludCB4UG9zID0gdHggKyBtX3ggLSBvYmpl
Y3QoKS0+bWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSk7CisgICAgaW50IHcgPSB3
aWR0aCgpICsgMiAqIG9iamVjdCgpLT5tYXhpbWFsT3V0bGluZVNpemUocGFpbnRJbmZvLnBoYXNl
KTsKKyAgICBib29sIGludGVyc2VjdHNEYW1hZ2VSZWN0ID0geFBvcyA8IHBhaW50SW5mby5yZWN0
LnJpZ2h0KCkgJiYgeFBvcyArIHcgPiBwYWludEluZm8ucmVjdC54KCk7CisKKyAgICBpZiAoaW50
ZXJzZWN0c0RhbWFnZVJlY3QgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VDaGlsZE91
dGxpbmVzKSB7CisgICAgICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxp
bmUgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSkgewogICAgICAg
ICAgICAgLy8gQWRkIG91cnNlbHZlcyB0byB0aGUgcGFpbnQgaW5mbyBzdHJ1Y3QncyBsaXN0IG9m
IGlubGluZXMgdGhhdCBuZWVkIHRvIHBhaW50IHRoZWlyCiAgICAgICAgICAgICAvLyBvdXRsaW5l
cy4KICAgICAgICAgICAgIGlmIChvYmplY3QoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJ
U0lCTEUgJiYgb2JqZWN0KCktPmhhc091dGxpbmUoKSAmJgotICAgICAgICAgICAgICAgICFvYmpl
Y3QoKS0+aXNJbmxpbmVDb250aW51YXRpb24oKSAmJiAhaXNSb290SW5saW5lQm94KCkpIHsKLSAg
ICAgICAgICAgICAgICBpLm91dGxpbmVPYmplY3RzLT5hZGQoZmxvd09iamVjdCgpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
IW9iamVjdCgpLT5pc0lubGluZUNvbnRpbnVhdGlvbigpICYmICFpc1Jvb3RJbmxpbmVCb3goKSkK
KyAgICAgICAgICAgICAgICBwYWludEluZm8ub3V0bGluZU9iamVjdHMtPmFkZChmbG93T2JqZWN0
KCkpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gMS4gUGFpbnQgb3VyIGJhY2tn
cm91bmQgYW5kIGJvcmRlci4KLSAgICAgICAgICAgIHBhaW50QmFja2dyb3VuZEFuZEJvcmRlcihp
LCB0eCwgdHkpOwotICAgICAgICAgICAgCisgICAgICAgICAgICBwYWludEJhY2tncm91bmRBbmRC
b3JkZXIocGFpbnRJbmZvLCB0eCwgdHkpOworCiAgICAgICAgICAgICAvLyAyLiBQYWludCBvdXIg
dW5kZXJsaW5lIGFuZCBvdmVybGluZS4KLSAgICAgICAgICAgIHBhaW50RGVjb3JhdGlvbnMoaSwg
dHgsIHR5LCBmYWxzZSk7CisgICAgICAgICAgICBwYWludERlY29yYXRpb25zKHBhaW50SW5mbywg
dHgsIHR5LCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBQYWludFBoYXNlIHBhaW50
UGhhc2UgPSBpLnBoYXNlID09IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzID8gUGFpbnRQaGFzZU91
dGxpbmUgOiBpLnBoYXNlOwotICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIGNoaWxkSW5mbyhp
KTsKKyAgICBQYWludFBoYXNlIHBhaW50UGhhc2UgPSBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZUNoaWxkT3V0bGluZXMgPyBQYWludFBoYXNlT3V0bGluZSA6IHBhaW50SW5mby5waGFzZTsK
KyAgICBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyBjaGlsZEluZm8ocGFpbnRJbmZvKTsKICAgICBj
aGlsZEluZm8ucGhhc2UgPSBwYWludFBoYXNlOwogCiAgICAgLy8gMy4gUGFpbnQgb3VyIGNoaWxk
cmVuLgpAQCAtNTgwLDggKzU3OCw4IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnQoUmVuZGVy
T2JqZWN0OjoKICAgICB9CiAKICAgICAvLyA0LiBQYWludCBvdXIgc3RyaWtlLXRocm91Z2gKLSAg
ICBpZiAoaW50ZXJzZWN0c0RhbWFnZVJlY3QgJiYgKGkucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVn
cm91bmQgfHwgaS5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKSkKLSAgICAgICAgcGFpbnRE
ZWNvcmF0aW9ucyhpLCB0eCwgdHksIHRydWUpOworICAgIGlmIChpbnRlcnNlY3RzRGFtYWdlUmVj
dCAmJiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kIHx8IHBhaW50SW5m
by5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKSkKKyAgICAgICAgcGFpbnREZWNvcmF0aW9u
cyhwYWludEluZm8sIHR4LCB0eSwgdHJ1ZSk7CiB9CiAKIHZvaWQgSW5saW5lRmxvd0JveDo6cGFp
bnRCYWNrZ3JvdW5kcyhHcmFwaGljc0NvbnRleHQqIHAsIGNvbnN0IENvbG9yJiBjLCBjb25zdCBC
YWNrZ3JvdW5kTGF5ZXIqIGJnTGF5ZXIsCkBAIC01OTMsMTMgKzU5MSwxMyBAQCB2b2lkIElubGlu
ZUZsb3dCb3g6OnBhaW50QmFja2dyb3VuZHMoR3JhCiAgICAgcGFpbnRCYWNrZ3JvdW5kKHAsIGMs
IGJnTGF5ZXIsIG15LCBtaCwgX3R4LCBfdHksIHcsIGgpOwogfQogCi12b2lkIElubGluZUZsb3dC
b3g6OnBhaW50QmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIHAsIGNvbnN0IENvbG9yJiBjLCBj
b25zdCBCYWNrZ3JvdW5kTGF5ZXIqIGJnTGF5ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgbXksIGludCBtaCwgaW50IF90eCwgaW50IF90eSwgaW50IHcsIGludCBo
KQordm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBDb2xvciYgYywgY29uc3QgQmFja2dyb3VuZExheWVyKiBiZ0xheWVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG15LCBpbnQgbWgsIGludCB0
eCwgaW50IHR5LCBpbnQgdywgaW50IGgpCiB7CiAgICAgQ2FjaGVkSW1hZ2UqIGJnID0gYmdMYXll
ci0+YmFja2dyb3VuZEltYWdlKCk7CiAgICAgYm9vbCBoYXNCYWNrZ3JvdW5kSW1hZ2UgPSBiZyAm
JiBiZy0+Y2FuUmVuZGVyKCk7CiAgICAgaWYgKCFoYXNCYWNrZ3JvdW5kSW1hZ2UgfHwgKCFwcmV2
TGluZUJveCgpICYmICFuZXh0TGluZUJveCgpKSB8fCAhcGFyZW50KCkpCi0gICAgICAgIG9iamVj
dCgpLT5wYWludEJhY2tncm91bmRFeHRlbmRlZChwLCBjLCBiZ0xheWVyLCBteSwgbWgsIF90eCwg
X3R5LCB3LCBoLCAKKyAgICAgICAgb2JqZWN0KCktPnBhaW50QmFja2dyb3VuZEV4dGVuZGVkKGNv
bnRleHQsIGMsIGJnTGF5ZXIsIG15LCBtaCwgdHgsIHR5LCB3LCBoLCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlckxlZnQoKSwgYm9yZGVyUmlnaHQoKSwg
cGFkZGluZ0xlZnQoKSwgcGFkZGluZ1JpZ2h0KCkpOwogICAgIGVsc2UgewogICAgICAgICAvLyBX
ZSBoYXZlIGEgYmFja2dyb3VuZCBpbWFnZSB0aGF0IHNwYW5zIG11bHRpcGxlIGxpbmVzLgpAQCAt
NjEzLDQ3ICs2MTEsNDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJhY2tncm91bmQoR3Jh
cAogICAgICAgICBpbnQgeE9mZnNldE9uTGluZSA9IDA7CiAgICAgICAgIGZvciAoSW5saW5lUnVu
Qm94KiBjdXJyID0gcHJldkxpbmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPnByZXZMaW5lQm94
KCkpCiAgICAgICAgICAgICB4T2Zmc2V0T25MaW5lICs9IGN1cnItPndpZHRoKCk7Ci0gICAgICAg
IGludCBzdGFydFggPSBfdHggLSB4T2Zmc2V0T25MaW5lOworICAgICAgICBpbnQgc3RhcnRYID0g
dHggLSB4T2Zmc2V0T25MaW5lOwogICAgICAgICBpbnQgdG90YWxXaWR0aCA9IHhPZmZzZXRPbkxp
bmU7CiAgICAgICAgIGZvciAoSW5saW5lUnVuQm94KiBjdXJyID0gdGhpczsgY3VycjsgY3VyciA9
IGN1cnItPm5leHRMaW5lQm94KCkpCiAgICAgICAgICAgICB0b3RhbFdpZHRoICs9IGN1cnItPndp
ZHRoKCk7Ci0gICAgICAgIHAtPnNhdmUoKTsKLSAgICAgICAgcC0+Y2xpcChJbnRSZWN0KF90eCwg
X3R5LCB3aWR0aCgpLCBoZWlnaHQoKSkpOwotICAgICAgICBvYmplY3QoKS0+cGFpbnRCYWNrZ3Jv
dW5kRXh0ZW5kZWQocCwgYywgYmdMYXllciwgbXksIG1oLCBzdGFydFgsIF90eSwKKyAgICAgICAg
Y29udGV4dC0+c2F2ZSgpOworICAgICAgICBjb250ZXh0LT5jbGlwKEludFJlY3QodHgsIHR5LCB3
aWR0aCgpLCBoZWlnaHQoKSkpOworICAgICAgICBvYmplY3QoKS0+cGFpbnRCYWNrZ3JvdW5kRXh0
ZW5kZWQoY29udGV4dCwgYywgYmdMYXllciwgbXksIG1oLCBzdGFydFgsIHR5LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxXaWR0aCwgaCwgYm9yZGVyTGVm
dCgpLCBib3JkZXJSaWdodCgpLCBwYWRkaW5nTGVmdCgpLCBwYWRkaW5nUmlnaHQoKSk7Ci0gICAg
ICAgIHAtPnJlc3RvcmUoKTsKKyAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogICAgIH0KIH0K
IAotdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJhY2tncm91bmRBbmRCb3JkZXIoUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpCit2b2lkIElubGluZUZsb3dCb3g6
OnBhaW50QmFja2dyb3VuZEFuZEJvcmRlcihSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICBpZiAoIW9iamVjdCgpLT5zaG91bGRQYWludFdp
dGhpblJvb3QoaSkgfHwgb2JqZWN0KCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxF
IHx8Ci0gICAgICAgIGkucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCisgICAgaWYgKCFv
YmplY3QoKS0+c2hvdWxkUGFpbnRXaXRoaW5Sb290KHBhaW50SW5mbykgfHwgb2JqZWN0KCktPnN0
eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8CisgICAgICAgICAgICBwYWludEluZm8u
cGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IE1vdmUgeC95IHRvIG91ciBjb29yZGluYXRlcy4KLSAgICBfdHggKz0gbV94OwotICAgIF90eSAr
PSBtX3k7CisgICAgdHggKz0gbV94OworICAgIHR5ICs9IG1feTsKICAgICAKICAgICBpbnQgdyA9
IHdpZHRoKCk7CiAgICAgaW50IGggPSBoZWlnaHQoKTsKIAotICAgIGludCBteSA9IG1heChfdHks
IGkuci55KCkpOworICAgIGludCBteSA9IG1heCh0eSwgcGFpbnRJbmZvLnJlY3QueSgpKTsKICAg
ICBpbnQgbWg7Ci0gICAgaWYgKF90eSA8IGkuci55KCkpCi0gICAgICAgIG1oID0gbWF4KDAsIGgg
LSAoaS5yLnkoKSAtIF90eSkpOworICAgIGlmICh0eSA8IHBhaW50SW5mby5yZWN0LnkoKSkKKyAg
ICAgICAgbWggPSBtYXgoMCwgaCAtIChwYWludEluZm8ucmVjdC55KCkgLSB0eSkpOwogICAgIGVs
c2UKLSAgICAgICAgbWggPSBtaW4oaS5yLmhlaWdodCgpLCBoKTsKKyAgICAgICAgbWggPSBtaW4o
cGFpbnRJbmZvLnJlY3QuaGVpZ2h0KCksIGgpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBwID0g
aS5wOworICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0Owog
ICAgIAogICAgIC8vIFlvdSBjYW4gdXNlIHA6OmZpcnN0LWxpbmUgdG8gc3BlY2lmeSBhIGJhY2tn
cm91bmQuIElmIHNvLCB0aGUgcm9vdCBsaW5lIGJveGVzIGZvcgogICAgIC8vIGEgbGluZSBtYXkg
YWN0dWFsbHkgaGF2ZSB0byBwYWludCBhIGJhY2tncm91bmQuCiAgICAgUmVuZGVyU3R5bGUqIHN0
eWxlVG9Vc2UgPSBvYmplY3QoKS0+c3R5bGUobV9maXJzdExpbmUpOwogICAgIGlmICgoIXBhcmVu
dCgpICYmIG1fZmlyc3RMaW5lICYmIHN0eWxlVG9Vc2UgIT0gb2JqZWN0KCktPnN0eWxlKCkpIHx8
IAotICAgICAgICAocGFyZW50KCkgJiYgb2JqZWN0KCktPnNob3VsZFBhaW50QmFja2dyb3VuZE9y
Qm9yZGVyKCkpKSB7CisgICAgICAgICAgICAocGFyZW50KCkgJiYgb2JqZWN0KCktPnNob3VsZFBh
aW50QmFja2dyb3VuZE9yQm9yZGVyKCkpKSB7CiAgICAgICAgIENvbG9yIGMgPSBzdHlsZVRvVXNl
LT5iYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICAgICAgcGFpbnRCYWNrZ3JvdW5kcyhwLCBjLCBzdHls
ZVRvVXNlLT5iYWNrZ3JvdW5kTGF5ZXJzKCksIG15LCBtaCwgX3R4LCBfdHksIHcsIGgpOworICAg
ICAgICBwYWludEJhY2tncm91bmRzKGNvbnRleHQsIGMsIHN0eWxlVG9Vc2UtPmJhY2tncm91bmRM
YXllcnMoKSwgbXksIG1oLCB0eCwgdHksIHcsIGgpOwogCiAgICAgICAgIC8vIDpmaXJzdC1saW5l
IGNhbm5vdCBiZSB1c2VkIHRvIHB1dCBib3JkZXJzIG9uIGEgbGluZS4gQWx3YXlzIHBhaW50IGJv
cmRlcnMgd2l0aCBvdXIKICAgICAgICAgLy8gbm9uLWZpcnN0LWxpbmUgc3R5bGUuCkBAIC02NjIs
MTEgKzY2MCwxMSBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50QmFja2dyb3VuZEFuZEJvCiAg
ICAgICAgICAgICBib29sIGhhc0JvcmRlckltYWdlID0gYm9yZGVySW1hZ2UgJiYgYm9yZGVySW1h
Z2UtPmNhblJlbmRlcigpOwogICAgICAgICAgICAgaWYgKGhhc0JvcmRlckltYWdlICYmICFib3Jk
ZXJJbWFnZS0+aXNMb2FkZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm47IC8vIERvbid0IHBh
aW50IGFueXRoaW5nIHdoaWxlIHdlIHdhaXQgZm9yIHRoZSBpbWFnZSB0byBsb2FkLgotICAgICAg
ICAgICAgCisKICAgICAgICAgICAgIC8vIFRoZSBzaW1wbGUgY2FzZSBpcyB3aGVyZSB3ZSBlaXRo
ZXIgaGF2ZSBubyBib3JkZXIgaW1hZ2Ugb3Igd2UgYXJlIHRoZSBvbmx5IGJveCBmb3IgdGhpcyBv
YmplY3QuICBJbiB0aG9zZQogICAgICAgICAgICAgLy8gY2FzZXMgb25seSBhIHNpbmdsZSBjYWxs
IHRvIGRyYXcgaXMgcmVxdWlyZWQuCiAgICAgICAgICAgICBpZiAoIWhhc0JvcmRlckltYWdlIHx8
ICghcHJldkxpbmVCb3goKSAmJiAhbmV4dExpbmVCb3goKSkpCi0gICAgICAgICAgICAgICAgb2Jq
ZWN0KCktPnBhaW50Qm9yZGVyKHAsIF90eCwgX3R5LCB3LCBoLCBvYmplY3QoKS0+c3R5bGUoKSwg
aW5jbHVkZUxlZnRFZGdlKCksIGluY2x1ZGVSaWdodEVkZ2UoKSk7CisgICAgICAgICAgICAgICAg
b2JqZWN0KCktPnBhaW50Qm9yZGVyKGNvbnRleHQsIHR4LCB0eSwgdywgaCwgb2JqZWN0KCktPnN0
eWxlKCksIGluY2x1ZGVMZWZ0RWRnZSgpLCBpbmNsdWRlUmlnaHRFZGdlKCkpOwogICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIGJvcmRlciBpbWFnZSB0aGF0
IHNwYW5zIG11bHRpcGxlIGxpbmVzLgogICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gYWRq
dXN0IF90eCBhbmQgX3R5IGJ5IHRoZSB3aWR0aCBvZiBhbGwgcHJldmlvdXMgbGluZXMuCkBAIC02
NzksMTQgKzY3NywxNCBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50QmFja2dyb3VuZEFuZEJv
CiAgICAgICAgICAgICAgICAgaW50IHhPZmZzZXRPbkxpbmUgPSAwOwogICAgICAgICAgICAgICAg
IGZvciAoSW5saW5lUnVuQm94KiBjdXJyID0gcHJldkxpbmVCb3goKTsgY3VycjsgY3VyciA9IGN1
cnItPnByZXZMaW5lQm94KCkpCiAgICAgICAgICAgICAgICAgICAgIHhPZmZzZXRPbkxpbmUgKz0g
Y3Vyci0+d2lkdGgoKTsKLSAgICAgICAgICAgICAgICBpbnQgc3RhcnRYID0gX3R4IC0geE9mZnNl
dE9uTGluZTsKKyAgICAgICAgICAgICAgICBpbnQgc3RhcnRYID0gdHggLSB4T2Zmc2V0T25MaW5l
OwogICAgICAgICAgICAgICAgIGludCB0b3RhbFdpZHRoID0geE9mZnNldE9uTGluZTsKICAgICAg
ICAgICAgICAgICBmb3IgKElubGluZVJ1bkJveCogY3VyciA9IHRoaXM7IGN1cnI7IGN1cnIgPSBj
dXJyLT5uZXh0TGluZUJveCgpKQogICAgICAgICAgICAgICAgICAgICB0b3RhbFdpZHRoICs9IGN1
cnItPndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICAgICAgICAg
IHAtPmNsaXAoSW50UmVjdChfdHgsIF90eSwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKLSAgICAgICAg
ICAgICAgICBvYmplY3QoKS0+cGFpbnRCb3JkZXIocCwgc3RhcnRYLCBfdHksIHRvdGFsV2lkdGgs
IGgsIG9iamVjdCgpLT5zdHlsZSgpKTsKLSAgICAgICAgICAgICAgICBwLT5yZXN0b3JlKCk7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC0+c2F2ZSgpOworICAgICAgICAgICAgICAgIGNvbnRleHQt
PmNsaXAoSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKSk7CisgICAgICAgICAgICAg
ICAgb2JqZWN0KCktPnBhaW50Qm9yZGVyKGNvbnRleHQsIHN0YXJ0WCwgdHksIHRvdGFsV2lkdGgs
IGgsIG9iamVjdCgpLT5zdHlsZSgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZXN0b3Jl
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC03MTIsMjEgKzcxMCwyMSBA
QCBzdGF0aWMgYm9vbCBzaG91bGREcmF3RGVjb3JhdGlvbihSZW5kZXJPCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIElubGluZUZsb3dCb3g6OnBhaW50RGVjb3JhdGlvbnMoUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHksIGJvb2wgcGFpbnRlZENoaWxkcmVu
KQordm9pZCBJbmxpbmVGbG93Qm94OjpwYWludERlY29yYXRpb25zKFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5LCBib29sIHBhaW50ZWRDaGlsZHJlbikK
IHsKICAgICAvLyBQYWludCB0ZXh0IGRlY29yYXRpb25zIGxpa2UgdW5kZXJsaW5lcy9vdmVybGlu
ZXMuIFdlIG9ubHkgZG8gdGhpcyBpZiB3ZSBhcmVuJ3QgaW4gcXVpcmtzIG1vZGUgKGkuZS4sIGlu
CiAgICAgLy8gYWxtb3N0LXN0cmljdCBtb2RlIG9yIHN0cmljdCBtb2RlKS4KLSAgICBpZiAob2Jq
ZWN0KCktPnN0eWxlKCktPmh0bWxIYWNrcygpIHx8ICFvYmplY3QoKS0+c2hvdWxkUGFpbnRXaXRo
aW5Sb290KGkpIHx8Ci0gICAgICAgIG9iamVjdCgpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0g
VklTSUJMRSkKKyAgICBpZiAob2JqZWN0KCktPnN0eWxlKCktPmh0bWxIYWNrcygpIHx8ICFvYmpl
Y3QoKS0+c2hvdWxkUGFpbnRXaXRoaW5Sb290KHBhaW50SW5mbykgfHwKKyAgICAgICAgICAgIG9i
amVjdCgpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSkKICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdW5kZXJsaW5lcyBvciBvdGhlciBkZWNvcmF0
aW9ucyB3aGVuIHdlJ3JlIHRyeWluZyB0byBkcmF3IG5vdGhpbmcgYnV0IHRoZSBzZWxlY3Rpb24g
YXMgd2hpdGUgdGV4dC4KLSAgICBpZiAoaS5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uICYm
IGkuZm9yY2VXaGl0ZVRleHQpCisgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNl
U2VsZWN0aW9uICYmIHBhaW50SW5mby5mb3JjZVdoaXRlVGV4dCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBwID0gaS5wOwotICAgIF90eCArPSBtX3g7Ci0gICAgX3R5
ICs9IG1feTsKKyAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4
dDsKKyAgICB0eCArPSBtX3g7CisgICAgdHkgKz0gbV95OwogICAgIFJlbmRlclN0eWxlKiBzdHls
ZVRvVXNlID0gb2JqZWN0KCktPnN0eWxlKG1fZmlyc3RMaW5lKTsKICAgICBpbnQgZGVjbyA9IHBh
cmVudCgpID8gc3R5bGVUb1VzZS0+dGV4dERlY29yYXRpb24oKSA6IHN0eWxlVG9Vc2UtPnRleHRE
ZWNvcmF0aW9uc0luRWZmZWN0KCk7CiAgICAgaWYgKGRlY28gIT0gVEROT05FICYmIApAQCAtNzQz
LDUxICs3NDEsNTAgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludERlY29yYXRpb25zKFJlbgog
ICAgICAgICAgICAgaWYgKHJvb3RMaW5lID09IHRoaXMpIHsKICAgICAgICAgICAgICAgICBpZiAo
eCArIHcgPj0gZWxsaXBzaXNYICsgZWxsaXBzaXNXaWR0aCkKICAgICAgICAgICAgICAgICAgICAg
dyAtPSAoeCArIHcgLSBlbGxpcHNpc1ggLSBlbGxpcHNpc1dpZHRoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICBpZiAoeCA+PSBlbGxpcHNpc1gpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICBpZiAoeCArIHcgPj0gZWxsaXBzaXNYKQogICAgICAgICAgICAgICAgICAgICB3
IC09ICh4ICsgdyAtIGVsbGlwc2lzWCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
ICAgICAgIAorCiAgICAgICAgIC8vIFNldCB1cCB0aGUgYXBwcm9wcmlhdGUgdGV4dC1zaGFkb3cg
ZWZmZWN0IGZvciB0aGUgZGVjb3JhdGlvbi4KICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbXVs
dGlwbGUgc2hhZG93IGVmZmVjdHMuICBOZWVkIG1vcmUgZnJvbSB0aGUgQ0cgQVBJIGJlZm9yZSB3
ZSBjYW4gZG8gdGhpcy4KICAgICAgICAgYm9vbCBzZXRTaGFkb3cgPSBmYWxzZTsKICAgICAgICAg
aWYgKHN0eWxlVG9Vc2UtPnRleHRTaGFkb3coKSkgewotICAgICAgICAgICAgcC0+c2V0U2hhZG93
KEludFNpemUoc3R5bGVUb1VzZS0+dGV4dFNoYWRvdygpLT54LCBzdHlsZVRvVXNlLT50ZXh0U2hh
ZG93KCktPnkpLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlVG9Vc2UtPnRleHRTaGFk
b3coKS0+Ymx1ciwgc3R5bGVUb1VzZS0+dGV4dFNoYWRvdygpLT5jb2xvcik7CisgICAgICAgICAg
ICBjb250ZXh0LT5zZXRTaGFkb3coSW50U2l6ZShzdHlsZVRvVXNlLT50ZXh0U2hhZG93KCktPngs
IHN0eWxlVG9Vc2UtPnRleHRTaGFkb3coKS0+eSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3R5bGVUb1VzZS0+dGV4dFNoYWRvdygpLT5ibHVyLCBzdHlsZVRvVXNlLT50ZXh0U2hh
ZG93KCktPmNvbG9yKTsKICAgICAgICAgICAgIHNldFNoYWRvdyA9IHRydWU7CiAgICAgICAgIH0K
LSAgICAgICAgCisKICAgICAgICAgLy8gV2UgbXVzdCBoYXZlIGNoaWxkIGJveGVzIGFuZCBoYXZl
IGRlY29yYXRpb25zIGRlZmluZWQuCi0gICAgICAgIF90eCArPSBib3JkZXJMZWZ0KCkgKyBwYWRk
aW5nTGVmdCgpOwotICAgICAgICAKKyAgICAgICAgdHggKz0gYm9yZGVyTGVmdCgpICsgcGFkZGlu
Z0xlZnQoKTsKKwogICAgICAgICBDb2xvciB1bmRlcmxpbmUsIG92ZXJsaW5lLCBsaW5ldGhyb3Vn
aDsKICAgICAgICAgdW5kZXJsaW5lID0gb3ZlcmxpbmUgPSBsaW5ldGhyb3VnaCA9IHN0eWxlVG9V
c2UtPmNvbG9yKCk7CiAgICAgICAgIGlmICghcGFyZW50KCkpCiAgICAgICAgICAgICBvYmplY3Qo
KS0+Z2V0VGV4dERlY29yYXRpb25Db2xvcnMoZGVjbywgdW5kZXJsaW5lLCBvdmVybGluZSwgbGlu
ZXRocm91Z2gpOwogCi0gICAgICAgIGlmIChzdHlsZVRvVXNlLT5mb250KCkgIT0gcC0+Zm9udCgp
KQotICAgICAgICAgICAgcC0+c2V0Rm9udChzdHlsZVRvVXNlLT5mb250KCkpOworICAgICAgICBp
ZiAoc3R5bGVUb1VzZS0+Zm9udCgpICE9IGNvbnRleHQtPmZvbnQoKSkKKyAgICAgICAgICAgIGNv
bnRleHQtPnNldEZvbnQoc3R5bGVUb1VzZS0+Zm9udCgpKTsKIAogICAgICAgICBib29sIGlzUHJp
bnRpbmcgPSBvYmplY3QoKS0+ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKTsKICAgICAgICAgaWYgKGRl
Y28gJiBVTkRFUkxJTkUgJiYgIXBhaW50ZWRDaGlsZHJlbikgewotICAgICAgICAgICAgcC0+c2V0
UGVuKHVuZGVybGluZSk7Ci0gICAgICAgICAgICBwLT5kcmF3TGluZUZvclRleHQoSW50UG9pbnQo
X3R4LCBfdHkpLCBtX2Jhc2VsaW5lLCB3LCBpc1ByaW50aW5nKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnNldFBlbih1bmRlcmxpbmUpOworICAgICAgICAgICAgY29udGV4dC0+ZHJhd0xpbmVGb3JU
ZXh0KEludFBvaW50KHR4LCB0eSksIG1fYmFzZWxpbmUsIHcsIGlzUHJpbnRpbmcpOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChkZWNvICYgT1ZFUkxJTkUgJiYgIXBhaW50ZWRDaGlsZHJlbikgewot
ICAgICAgICAgICAgcC0+c2V0UGVuKG92ZXJsaW5lKTsKLSAgICAgICAgICAgIHAtPmRyYXdMaW5l
Rm9yVGV4dChJbnRQb2ludChfdHgsIF90eSksIDAsIHcsIGlzUHJpbnRpbmcpOworICAgICAgICAg
ICAgY29udGV4dC0+c2V0UGVuKG92ZXJsaW5lKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdM
aW5lRm9yVGV4dChJbnRQb2ludCh0eCwgdHkpLCAwLCB3LCBpc1ByaW50aW5nKTsKICAgICAgICAg
fQogICAgICAgICBpZiAoZGVjbyAmIExJTkVfVEhST1VHSCAmJiBwYWludGVkQ2hpbGRyZW4pIHsK
LSAgICAgICAgICAgIHAtPnNldFBlbihsaW5ldGhyb3VnaCk7Ci0gICAgICAgICAgICBwLT5kcmF3
TGluZUZvclRleHQoSW50UG9pbnQoX3R4LCBfdHkpLCAyKm1fYmFzZWxpbmUvMywgdywgaXNQcmlu
dGluZyk7CisgICAgICAgICAgICBjb250ZXh0LT5zZXRQZW4obGluZXRocm91Z2gpOworICAgICAg
ICAgICAgY29udGV4dC0+ZHJhd0xpbmVGb3JUZXh0KEludFBvaW50KHR4LCB0eSksIDIgKiBtX2Jh
c2VsaW5lIC8gMywgdywgaXNQcmludGluZyk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoc2V0
U2hhZG93KQotICAgICAgICAgICAgcC0+Y2xlYXJTaGFkb3coKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmNsZWFyU2hhZG93KCk7CiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5oCShyZXZpc2lvbiAxNzUxNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dC
b3guaAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTQgKzc0LDE0IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgdm9pZCBjbGVhclRydW5jYXRpb24oKTsKIAotICAgIHZpcnR1YWwgdm9pZCBwYWludEJh
Y2tncm91bmRBbmRCb3JkZXIoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGludCBfdHgsIGlu
dCBfdHkpOwotICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kcyhHcmFwaGljc0NvbnRleHQqIHAsIGNv
bnN0IENvbG9yJiBjLCBjb25zdCBCYWNrZ3JvdW5kTGF5ZXIqIGJnTGF5ZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBteSwgaW50IG1oLCBpbnQgX3R4LCBpbnQgX3R5LCBpbnQgdywg
aW50IGgpOwotICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogcCwgY29u
c3QgQ29sb3ImIGMsIGNvbnN0IEJhY2tncm91bmRMYXllciogYmdMYXllciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgbXksIGludCBtaCwgaW50IF90eCwgaW50IF90eSwgaW50IHcsIGlu
dCBoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnREZWNvcmF0aW9ucyhSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSwgYm9vbCBwYWludGVkQ2hpbGRyZW4gPSBmYWxz
ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBp
bnQgX3R4LCBpbnQgX3R5KTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50LCBpbnQsIGludCwgaW50KTsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRCYWNrZ3JvdW5kQW5kQm9yZGVyKFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kcyhHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBDb2xvciYsIGNvbnN0IEJhY2tncm91bmRMYXllciosCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBteSwgaW50IG1oLCBpbnQgdHgsIGludCB0eSwgaW50IHcs
IGludCBoKTsKKyAgICB2b2lkIHBhaW50QmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBDb2xvciYsIGNvbnN0IEJhY2tncm91bmRMYXllciosCisgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IG15LCBpbnQgbWgsIGludCB0eCwgaW50IHR5LCBpbnQgdywgaW50IGgpOworICAgIHZp
cnR1YWwgdm9pZCBwYWludERlY29yYXRpb25zKFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgaW50
IHR4LCBpbnQgdHksIGJvb2wgcGFpbnRlZENoaWxkcmVuID0gZmFsc2UpOworICAgIHZpcnR1YWwg
dm9pZCBwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKyAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSk7CiAKICAgICBpbnQgbWFyZ2lu
Qm9yZGVyUGFkZGluZ0xlZnQoKTsKICAgICBpbnQgbWFyZ2luQm9yZGVyUGFkZGluZ1JpZ2h0KCk7
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVSdW5Cb3guaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVSdW5Cb3guaAkocmV2aXNpb24gMTc1MTYpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVSdW5Cb3guaAkod29ya2luZyBjb3B5KQpAQCAtMjAsOCArMjAs
OCBAQAogICoKICAqLwogCi0jaWZuZGVmIElubGluZVJ1bkJveF9ICi0jZGVmaW5lIElubGluZVJ1
bkJveF9ICisjaWZuZGVmIElubGluZVJ1bkJveF9oCisjZGVmaW5lIElubGluZVJ1bkJveF9oCiAK
ICNpbmNsdWRlICJJbmxpbmVCb3guaCIKIApAQCAtNTEsNCArNTEsNCBAQCBwcm90ZWN0ZWQ6CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIElubGluZVJ1bkJveF9ICisjZW5k
aWYgLy8gSW5saW5lUnVuQm94X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
CShyZXZpc2lvbiAxNzUxNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsMjkgKzIzMywyOSBAQCBib29sIElubGluZVRleHRCb3g6
Om5vZGVBdFBvaW50KGNvbnN0IEhpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIElubGlu
ZVRleHRCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgdHgsIGludCB0
eSkKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBh
aW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgaWYgKGlzTGluZUJyZWFrKCkgfHwgIW9i
amVjdCgpLT5zaG91bGRQYWludFdpdGhpblJvb3QoaSkgfHwgb2JqZWN0KCktPnN0eWxlKCktPnZp
c2liaWxpdHkoKSAhPSBWSVNJQkxFIHx8Ci0gICAgICAgIG1fdHJ1bmNhdGlvbiA9PSBjRnVsbFRy
dW5jYXRpb24gfHwgaS5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSkKKyAgICBpZiAoaXNMaW5l
QnJlYWsoKSB8fCAhb2JqZWN0KCktPnNob3VsZFBhaW50V2l0aGluUm9vdChwYWludEluZm8pIHx8
IG9iamVjdCgpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSB8fAorICAgICAgICAg
ICAgbV90cnVuY2F0aW9uID09IGNGdWxsVHJ1bmNhdGlvbiB8fCBwYWludEluZm8ucGhhc2UgPT0g
UGFpbnRQaGFzZU91dGxpbmUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhc3NlcnQoaS5w
aGFzZSAhPSBQYWludFBoYXNlU2VsZk91dGxpbmUgJiYgaS5waGFzZSAhPSBQYWludFBoYXNlQ2hp
bGRPdXRsaW5lcyk7CisgICAgQVNTRVJUKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlU2Vs
Zk91dGxpbmUgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzKTsK
IAogICAgIGludCB4UG9zID0gdHggKyBtX3ggLSBwYXJlbnQoKS0+bWF4SG9yaXpvbnRhbFNoYWRv
dygpOwogICAgIGludCB3ID0gd2lkdGgoKSArIDIgKiBwYXJlbnQoKS0+bWF4SG9yaXpvbnRhbFNo
YWRvdygpOwotICAgIGlmICh4UG9zID49IGkuci5yaWdodCgpIHx8IHhQb3MgKyB3IDw9IGkuci54
KCkpCisgICAgaWYgKHhQb3MgPj0gcGFpbnRJbmZvLnJlY3QucmlnaHQoKSB8fCB4UG9zICsgdyA8
PSBwYWludEluZm8ucmVjdC54KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgaXNQcmlu
dGluZyA9IHRleHRPYmplY3QoKS0+ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKTsKICAgICAKICAgICAv
LyBEZXRlcm1pbmUgd2hldGhlciBvciBub3Qgd2UncmUgc2VsZWN0ZWQuCiAgICAgYm9vbCBoYXZl
U2VsZWN0aW9uID0gIWlzUHJpbnRpbmcgJiYgc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmpl
Y3Q6OlNlbGVjdGlvbk5vbmU7Ci0gICAgaWYgKCFoYXZlU2VsZWN0aW9uICYmIGkucGhhc2UgPT0g
UGFpbnRQaGFzZVNlbGVjdGlvbikKKyAgICBpZiAoIWhhdmVTZWxlY3Rpb24gJiYgcGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2VTZWxlY3Rpb24pCiAgICAgICAgIC8vIFdoZW4gb25seSBwYWlu
dGluZyB0aGUgc2VsZWN0aW9uLCBkb24ndCBib3RoZXIgdG8gcGFpbnQgaWYgdGhlcmUgaXMgbm9u
ZS4KICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdl
IGhhdmUgbWFya2VkIHRleHQuCi0gICAgUmFuZ2UgKm1hcmtlZFRleHRSYW5nZSA9IG9iamVjdCgp
LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5tYXJrZWRUZXh0UmFuZ2UoKTsKKyAgICBSYW5nZSogbWFy
a2VkVGV4dFJhbmdlID0gb2JqZWN0KCktPmRvY3VtZW50KCktPmZyYW1lKCktPm1hcmtlZFRleHRS
YW5nZSgpOwogICAgIGludCBleGNlcHRpb24gPSAwOwogICAgIGJvb2wgaGF2ZU1hcmtlZFRleHQg
PSBtYXJrZWRUZXh0UmFuZ2UgJiYgbWFya2VkVGV4dFJhbmdlLT5zdGFydENvbnRhaW5lcihleGNl
cHRpb24pID09IG9iamVjdCgpLT5ub2RlKCk7CiAgICAgYm9vbCBtYXJrZWRUZXh0VXNlc1VuZGVy
bGluZXMgPSBvYmplY3QoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bWFya2VkVGV4dFVzZXNVbmRl
cmxpbmVzKCk7CkBAIC0yNjQsMzAgKzI2NCwzMSBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50
KFJlbmRlck9iamVjdDo6CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSBvYmplY3QoKS0+
c3R5bGUobV9maXJzdExpbmUpOwogICAgIGludCBkID0gc3R5bGVUb1VzZS0+dGV4dERlY29yYXRp
b25zSW5FZmZlY3QoKTsKICAgICBjb25zdCBGb250KiBmb250ID0gJnN0eWxlVG9Vc2UtPmZvbnQo
KTsKLSAgICBpZiAoKmZvbnQgIT0gaS5wLT5mb250KCkpCi0gICAgICAgIGkucC0+c2V0Rm9udCgq
Zm9udCk7CisgICAgaWYgKCpmb250ICE9IHBhaW50SW5mby5jb250ZXh0LT5mb250KCkpCisgICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGb250KCpmb250KTsKIAogICAgIC8vIDEuIFBhaW50
IGJhY2tncm91bmRzIGJlaGluZCB0ZXh0IGlmIG5lZWRlZC4gIEV4YW1wbGVzIG9mIHN1Y2ggYmFj
a2dyb3VuZHMgaW5jbHVkZSBzZWxlY3Rpb24KICAgICAvLyBhbmQgbWFya2VkIHRleHQuCi0gICAg
aWYgKGkucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiAhaXNQcmludGluZykgeworICAg
IGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiAhaXNQcmludGlu
ZykgewogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgLy8gQ3VzdG9tIGhpZ2hsaWdodGVycyBn
byBiZWhpbmQgZXZlcnl0aGluZyBlbHNlLgotICAgICAgICBpZiAoc3R5bGVUb1VzZS0+aGlnaGxp
Z2h0KCkgIT0gbnVsbEF0b20gJiYgIWkucC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBp
ZiAoc3R5bGVUb1VzZS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0b20gJiYgIXBhaW50SW5mby5jb250
ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdo
dCh0eCwgdHksIHN0eWxlVG9Vc2UtPmhpZ2hsaWdodCgpKTsKICNlbmRpZgogCiAgICAgICAgIGlm
IChoYXZlTWFya2VkVGV4dCAgJiYgIW1hcmtlZFRleHRVc2VzVW5kZXJsaW5lcykKLSAgICAgICAg
ICAgIHBhaW50TWFya2VkVGV4dEJhY2tncm91bmQoaS5wLCB0eCwgdHksIHN0eWxlVG9Vc2UsIGZv
bnQsIG1hcmtlZFRleHRSYW5nZS0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwgbWFya2VkVGV4dFJh
bmdlLT5lbmRPZmZzZXQoZXhjZXB0aW9uKSk7CisgICAgICAgICAgICBwYWludE1hcmtlZFRleHRC
YWNrZ3JvdW5kKHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHN0eWxlVG9Vc2UsIGZvbnQsIG1h
cmtlZFRleHRSYW5nZS0+c3RhcnRPZmZzZXQoZXhjZXB0aW9uKSwgbWFya2VkVGV4dFJhbmdlLT5l
bmRPZmZzZXQoZXhjZXB0aW9uKSk7CiAKLSAgICAgICAgcGFpbnREb2N1bWVudE1hcmtlcnMoaS5w
LCB0eCwgdHksIHN0eWxlVG9Vc2UsIGZvbnQsIHRydWUpOworICAgICAgICBwYWludERvY3VtZW50
TWFya2VycyhwYWludEluZm8uY29udGV4dCwgdHgsIHR5LCBzdHlsZVRvVXNlLCBmb250LCB0cnVl
KTsKIAogICAgICAgICBpZiAoaGF2ZVNlbGVjdGlvbikKLSAgICAgICAgICAgIHBhaW50U2VsZWN0
aW9uKGkucCwgdHgsIHR5LCBzdHlsZVRvVXNlLCBmb250KTsKKyAgICAgICAgICAgIHBhaW50U2Vs
ZWN0aW9uKHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHN0eWxlVG9Vc2UsIGZvbnQpOwogICAg
IH0KLSAgICAKKwogICAgIC8vIDIuIE5vdyBwYWludCB0aGUgZm9yZWdyb3VuZCwgaW5jbHVkaW5n
IHRleHQgYW5kIGRlY29yYXRpb25zIGxpa2UgdW5kZXJsaW5lL292ZXJsaW5lIChpbiBxdWlya3Mg
bW9kZSBvbmx5KS4KLSAgICBpZiAobV9sZW4gPD0gMCkgcmV0dXJuOwotICAgIAorICAgIGlmICht
X2xlbiA8PSAwKQorICAgICAgICByZXR1cm47CisKICAgICBjb25zdCBWZWN0b3I8TWFya2VkVGV4
dFVuZGVybGluZT4qIHVuZGVybGluZXMgPSAwOwogICAgIHNpemVfdCBudW1VbmRlcmxpbmVzID0g
MDsKICAgICBpZiAoaGF2ZU1hcmtlZFRleHQgJiYgbWFya2VkVGV4dFVzZXNVbmRlcmxpbmVzKSB7
CkBAIC0yOTYsOCArMjk3LDggQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChSZW5kZXJPYmpl
Y3Q6OgogICAgIH0KIAogICAgIENvbG9yIHRleHRDb2xvcjsKLSAgICAKLSAgICBpZiAoaS5mb3Jj
ZVdoaXRlVGV4dCkKKworICAgIGlmIChwYWludEluZm8uZm9yY2VXaGl0ZVRleHQpCiAgICAgICAg
IHRleHRDb2xvciA9IENvbG9yOjp3aGl0ZTsKICAgICBlbHNlIHsKICAgICAgICAgdGV4dENvbG9y
ID0gc3R5bGVUb1VzZS0+Y29sb3IoKTsKQEAgLTMwNywyMyArMzA4LDIzIEBAIHZvaWQgSW5saW5l
VGV4dEJveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjoKICAgICAgICAgICAgIHRleHRDb2xvciA9IGNv
cnJlY3RlZFRleHRDb2xvcih0ZXh0Q29sb3IsIENvbG9yOjp3aGl0ZSk7CiAgICAgfQogCi0gICAg
aWYgKHRleHRDb2xvciAhPSBpLnAtPnBlbigpLmNvbG9yKCkpCi0gICAgICAgIGkucC0+c2V0UGVu
KHRleHRDb2xvcik7CisgICAgaWYgKHRleHRDb2xvciAhPSBwYWludEluZm8uY29udGV4dC0+cGVu
KCkuY29sb3IoKSkKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFBlbih0ZXh0Q29sb3Ip
OwogCiAgICAgLy8gU2V0IGEgdGV4dCBzaGFkb3cgaWYgd2UgaGF2ZSBvbmUuCiAgICAgLy8gRklY
TUU6IFN1cHBvcnQgbXVsdGlwbGUgc2hhZG93IGVmZmVjdHMuICBOZWVkIG1vcmUgZnJvbSB0aGUg
Q0cgQVBJIGJlZm9yZQogICAgIC8vIHdlIGNhbiBkbyB0aGlzLgogICAgIGJvb2wgc2V0U2hhZG93
ID0gZmFsc2U7CiAgICAgaWYgKHN0eWxlVG9Vc2UtPnRleHRTaGFkb3coKSkgewotICAgICAgICBp
LnAtPnNldFNoYWRvdyhJbnRTaXplKHN0eWxlVG9Vc2UtPnRleHRTaGFkb3coKS0+eCwgc3R5bGVU
b1VzZS0+dGV4dFNoYWRvdygpLT55KSwKLSAgICAgICAgICAgIHN0eWxlVG9Vc2UtPnRleHRTaGFk
b3coKS0+Ymx1ciwgc3R5bGVUb1VzZS0+dGV4dFNoYWRvdygpLT5jb2xvcik7CisgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT5zZXRTaGFkb3coSW50U2l6ZShzdHlsZVRvVXNlLT50ZXh0U2hhZG93
KCktPngsIHN0eWxlVG9Vc2UtPnRleHRTaGFkb3coKS0+eSksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3R5bGVUb1VzZS0+dGV4dFNoYWRvdygpLT5ibHVyLCBzdHlsZVRv
VXNlLT50ZXh0U2hhZG93KCktPmNvbG9yKTsKICAgICAgICAgc2V0U2hhZG93ID0gdHJ1ZTsKICAg
ICB9CiAKLSAgICBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSA9IChpLnBoYXNlID09IFBhaW50
UGhhc2VTZWxlY3Rpb24pOworICAgIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5ID0gKHBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKTsKICAgICBib29sIHBhaW50U2VsZWN0
ZWRUZXh0U2VwYXJhdGVseSA9IGZhbHNlOyAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBoYXZlIHRvIGRv
IG11bHRpcGxlIHBhaW50cy4gIE9ubHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBuZWNlc3Nhcnkgd2hlbiBhIGN1c3RvbSA6OnNlbGVjdGlvbiBmb3Jl
Z3JvdW5kIGNvbG9yIGlzIGFwcGxpZWQuCi0gICAgQ29sb3Igc2VsZWN0aW9uQ29sb3IgPSBpLnAt
PnBlbigpLmNvbG9yKCk7CisgICAgQ29sb3Igc2VsZWN0aW9uQ29sb3IgPSBwYWludEluZm8uY29u
dGV4dC0+cGVuKCkuY29sb3IoKTsKICAgICBTaGFkb3dEYXRhKiBzZWxlY3Rpb25UZXh0U2hhZG93
ID0gMDsKICAgICBpZiAoaGF2ZVNlbGVjdGlvbikgewogICAgICAgICAvLyBDaGVjayBmb3JlZ3Jv
dW5kIGNvbG9yIGZpcnN0LgpAQCAtMzUzLDQ1ICszNTQsNDQgQEAgdm9pZCBJbmxpbmVUZXh0Qm94
OjpwYWludChSZW5kZXJPYmplY3Q6OgogICAgICAgICBpbnQgZW5kUG9pbnQgPSBtX2xlbjsKICAg
ICAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uKQogICAgICAgICAgICAgZW5k
UG9pbnQgPSBtX3RydW5jYXRpb24gLSBtX3N0YXJ0OwotICAgICAgICBpLnAtPmRyYXdUZXh0KFRl
eHRSdW4odGV4dFN0ciwgbV9zdGFydCwgZW5kUG9pbnQpLCBJbnRQb2ludChtX3ggKyB0eCwgbV95
ICsgdHkgKyBtX2Jhc2VsaW5lKSwgdGV4dFN0eWxlKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPmRyYXdUZXh0KFRleHRSdW4odGV4dFN0ciwgbV9zdGFydCwgZW5kUG9pbnQpLCBJbnRQb2lu
dChtX3ggKyB0eCwgbV95ICsgdHkgKyBtX2Jhc2VsaW5lKSwgdGV4dFN0eWxlKTsKICAgICB9IGVs
c2UgewogICAgICAgICBpbnQgc1BvcywgZVBvczsKICAgICAgICAgc2VsZWN0aW9uU3RhcnRFbmQo
c1BvcywgZVBvcyk7CiAgICAgICAgIGlmIChwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHkpIHsK
ICAgICAgICAgICAgIC8vIHBhaW50IG9ubHkgdGhlIHRleHQgdGhhdCBpcyBub3Qgc2VsZWN0ZWQK
ICAgICAgICAgICAgIGlmIChzUG9zID49IGVQb3MpCi0gICAgICAgICAgICAgICAgaS5wLT5kcmF3
VGV4dChUZXh0UnVuKHRleHRTdHIsIG1fc3RhcnQsIG1fbGVuKSwgSW50UG9pbnQobV94ICsgdHgs
IG1feSArIHR5ICsgbV9iYXNlbGluZSksIHRleHRTdHlsZSk7CisgICAgICAgICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPmRyYXdUZXh0KFRleHRSdW4odGV4dFN0ciwgbV9zdGFydCwgbV9sZW4p
LCBJbnRQb2ludChtX3ggKyB0eCwgbV95ICsgdHkgKyBtX2Jhc2VsaW5lKSwgdGV4dFN0eWxlKTsK
ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChzUG9zIC0gMSA+PSAwKQot
ICAgICAgICAgICAgICAgICAgICBpLnAtPmRyYXdUZXh0KFRleHRSdW4odGV4dFN0ciwgbV9zdGFy
dCwgbV9sZW4sIDAsIHNQb3MpLCBJbnRQb2ludChtX3ggKyB0eCwgbV95ICsgdHkgKyBtX2Jhc2Vs
aW5lKSwgdGV4dFN0eWxlKTsKKyAgICAgICAgICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PmRyYXdUZXh0KFRleHRSdW4odGV4dFN0ciwgbV9zdGFydCwgbV9sZW4sIDAsIHNQb3MpLCBJbnRQ
b2ludChtX3ggKyB0eCwgbV95ICsgdHkgKyBtX2Jhc2VsaW5lKSwgdGV4dFN0eWxlKTsKICAgICAg
ICAgICAgICAgICBpZiAoZVBvcyA8IG1fc3RhcnQgKyBtX2xlbikKLSAgICAgICAgICAgICAgICAg
ICAgaS5wLT5kcmF3VGV4dChUZXh0UnVuKHRleHRTdHIsIG1fc3RhcnQsIG1fbGVuLCBlUG9zKSwg
SW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgbV9iYXNlbGluZSksIHRleHRTdHlsZSk7Cisg
ICAgICAgICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3VGV4dChUZXh0UnVuKHRl
eHRTdHIsIG1fc3RhcnQsIG1fbGVuLCBlUG9zKSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5
ICsgbV9iYXNlbGluZSksIHRleHRTdHlsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICAgICAgICAgIAorCiAgICAgICAgIGlmIChzUG9zIDwgZVBvcykgewogICAgICAgICAgICAgLy8g
cGFpbnQgb25seSB0aGUgdGV4dCB0aGF0IGlzIHNlbGVjdGVkCi0gICAgICAgICAgICBpZiAoc2Vs
ZWN0aW9uQ29sb3IgIT0gaS5wLT5wZW4oKS5jb2xvcigpKQotICAgICAgICAgICAgICAgIGkucC0+
c2V0UGVuKHNlbGVjdGlvbkNvbG9yKTsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHNl
bGVjdGlvbkNvbG9yICE9IHBhaW50SW5mby5jb250ZXh0LT5wZW4oKS5jb2xvcigpKQorICAgICAg
ICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRQZW4oc2VsZWN0aW9uQ29sb3IpOworCiAg
ICAgICAgICAgICBpZiAoc2VsZWN0aW9uVGV4dFNoYWRvdykKLSAgICAgICAgICAgICAgICBpLnAt
PnNldFNoYWRvdyhJbnRTaXplKHNlbGVjdGlvblRleHRTaGFkb3ctPngsIHNlbGVjdGlvblRleHRT
aGFkb3ctPnkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblRleHRT
aGFkb3ctPmJsdXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uVGV4
dFNoYWRvdy0+Y29sb3IpOwotICAgICAgICAgICAgaS5wLT5kcmF3VGV4dChUZXh0UnVuKHRleHRT
dHIsIG1fc3RhcnQsIG1fbGVuLCBzUG9zLCBlUG9zKSwgSW50UG9pbnQobV94ICsgdHgsIG1feSAr
IHR5ICsgbV9iYXNlbGluZSksIHRleHRTdHlsZSk7CisgICAgICAgICAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnNldFNoYWRvdyhJbnRTaXplKHNlbGVjdGlvblRleHRTaGFkb3ctPngsIHNlbGVj
dGlvblRleHRTaGFkb3ctPnkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZWN0aW9uVGV4dFNoYWRvdy0+Ymx1ciwgc2VsZWN0aW9uVGV4dFNoYWRvdy0+
Y29sb3IpOworICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdUZXh0KFRleHRSdW4o
dGV4dFN0ciwgbV9zdGFydCwgbV9sZW4sIHNQb3MsIGVQb3MpLCBJbnRQb2ludChtX3ggKyB0eCwg
bV95ICsgdHkgKyBtX2Jhc2VsaW5lKSwgdGV4dFN0eWxlKTsKICAgICAgICAgICAgIGlmIChzZWxl
Y3Rpb25UZXh0U2hhZG93KQotICAgICAgICAgICAgICAgIGkucC0+Y2xlYXJTaGFkb3coKTsKKyAg
ICAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xlYXJTaGFkb3coKTsKICAgICAgICAg
fQogICAgIH0KIAogICAgIC8vIFBhaW50IGRlY29yYXRpb25zCi0gICAgaWYgKGQgIT0gVEROT05F
ICYmIGkucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiBzdHlsZVRvVXNlLT5odG1sSGFj
a3MoKSkgewotICAgICAgICBpLnAtPnNldFBlbihzdHlsZVRvVXNlLT5jb2xvcigpKTsKLSAgICAg
ICAgcGFpbnREZWNvcmF0aW9uKGkucCwgdHgsIHR5LCBkKTsKKyAgICBpZiAoZCAhPSBURE5PTkUg
JiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24gJiYgc3R5bGVUb1VzZS0+
aHRtbEhhY2tzKCkpIHsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFBlbihzdHlsZVRv
VXNlLT5jb2xvcigpKTsKKyAgICAgICAgcGFpbnREZWNvcmF0aW9uKHBhaW50SW5mby5jb250ZXh0
LCB0eCwgdHksIGQpOwogICAgIH0KIAotICAgIGlmIChpLnBoYXNlICE9IFBhaW50UGhhc2VTZWxl
Y3Rpb24pIHsKLSAgICAgICAgcGFpbnREb2N1bWVudE1hcmtlcnMoaS5wLCB0eCwgdHksIHN0eWxl
VG9Vc2UsIGZvbnQsIGZhbHNlKTsKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhh
c2VTZWxlY3Rpb24pIHsKKyAgICAgICAgcGFpbnREb2N1bWVudE1hcmtlcnMocGFpbnRJbmZvLmNv
bnRleHQsIHR4LCB0eSwgc3R5bGVUb1VzZSwgZm9udCwgZmFsc2UpOwogCiAgICAgICAgIGZvciAo
c2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBudW1VbmRlcmxpbmVzOyArK2luZGV4KSB7CiAgICAg
ICAgICAgICBjb25zdCBNYXJrZWRUZXh0VW5kZXJsaW5lJiB1bmRlcmxpbmUgPSAoKnVuZGVybGlu
ZXMpW2luZGV4XTsKQEAgLTQwNCw3ICs0MDQsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50
KFJlbmRlck9iamVjdDo6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICh1bmRlcmxpbmUu
c3RhcnRPZmZzZXQgPD0gZW5kKCkpIHsKICAgICAgICAgICAgICAgICAvLyB1bmRlcmxpbmUgaW50
ZXJzZWN0cyB0aGlzIHJ1bi4gIFBhaW50IGl0LgotICAgICAgICAgICAgICAgIHBhaW50TWFya2Vk
VGV4dFVuZGVybGluZShpLnAsIHR4LCB0eSwgdW5kZXJsaW5lKTsKKyAgICAgICAgICAgICAgICBw
YWludE1hcmtlZFRleHRVbmRlcmxpbmUocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgdW5kZXJs
aW5lKTsKICAgICAgICAgICAgICAgICBpZiAodW5kZXJsaW5lLmVuZE9mZnNldCA+IGVuZCgpICsg
MSkKICAgICAgICAgICAgICAgICAgICAgLy8gdW5kZXJsaW5lIGFsc28gcnVucyBpbnRvIHRoZSBu
ZXh0IHJ1bi4gQmFpbCBub3csIG5vIG1vcmUgbWFya2VyIGFkdmFuY2VtZW50LgogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTQxNSw3ICs0MTUsNyBAQCB2b2lkIElubGluZVRleHRCb3g6
OnBhaW50KFJlbmRlck9iamVjdDo6CiAgICAgfQogCiAgICAgaWYgKHNldFNoYWRvdykKLSAgICAg
ICAgaS5wLT5jbGVhclNoYWRvdygpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xlYXJT
aGFkb3coKTsKIH0KIAogdm9pZCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZChpbnQm
IHNQb3MsIGludCYgZVBvcykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHJldmlz
aW9uIDE3NTE2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgSW5saW5lVGV4dEJv
eF9ICi0jZGVmaW5lIElubGluZVRleHRCb3hfSAorI2lmbmRlZiBJbmxpbmVUZXh0Qm94X2gKKyNk
ZWZpbmUgSW5saW5lVGV4dEJveF9oCiAKICNpbmNsdWRlICJEb2N1bWVudE1hcmtlci5oIgogI2lu
Y2x1ZGUgIklubGluZVJ1bkJveC5oIgpAQCAtNzAsOSArNzAsOSBAQCBwdWJsaWM6CiAgICAgSW50
UmVjdCBzZWxlY3Rpb25SZWN0KGludCBhYnN4LCBpbnQgYWJzeSwgaW50IHN0YXJ0UG9zLCBpbnQg
ZW5kUG9zKTsKICAgICBib29sIGlzU2VsZWN0ZWQoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBj
b25zdDsKICAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKGludCYgc1BvcywgaW50JiBlUG9zKTsK
LSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGks
IGludCB0eCwgaW50IHR5KTsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50LCBpbnQsIGludCwgaW50KTsKKworICAg
IHZpcnR1YWwgdm9pZCBwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGludCB0eCwgaW50
IHR5KTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3Qm
LCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSk7CiAKICAgICBS
ZW5kZXJUZXh0KiB0ZXh0T2JqZWN0KCkgY29uc3Q7CiAKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGlj
OgogCiAgICAgLy8gT3ZlcmxvYWRlZCBuZXcgb3BlcmF0b3IuICBEZXJpdmVkIGNsYXNzZXMgbXVz
dCBvdmVycmlkZSBvcGVyYXRvciBuZXcKICAgICAvLyBpbiBvcmRlciB0byBhbGxvY2F0ZSBvdXQg
b2YgdGhlIFJlbmRlckFyZW5hLgotICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIFJlbmRl
ckFyZW5hKikgdGhyb3coKTsgIAorICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIFJlbmRl
ckFyZW5hKikgdGhyb3coKTsKIAogICAgIC8vIE92ZXJyaWRkZW4gdG8gcHJldmVudCB0aGUgbm9y
bWFsIGRlbGV0ZSBmcm9tIGJlaW5nIGNhbGxlZC4KICAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2
b2lkKiwgc2l6ZV90KTsKQEAgLTE0OCw0ICsxNDgsNCBAQCBpbmxpbmUgUmVuZGVyVGV4dCogSW5s
aW5lVGV4dEJveDo6dGV4dE9iCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8v
IElubGluZVRleHRCb3hfSAorI2VuZGlmIC8vIElubGluZVRleHRCb3hfaApJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTc1MTYpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNDMsMzUgKzEyNDMsMzUgQEAg
dm9pZCBSZW5kZXJCbG9jazo6cmVwYWludE9iamVjdHNCZWZvcmVMYQogICAgIH0KIH0KIAotdm9p
ZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KQordm9p
ZCBSZW5kZXJCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5
KQogewotICAgIF90eCArPSBtX3g7Ci0gICAgX3R5ICs9IG1feTsKKyAgICB0eCArPSBtX3g7Cisg
ICAgdHkgKz0gbV95OwogCiAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBkbyBhbnl0aGluZyBh
dCBhbGwuCiAgICAgLy8gRklYTUU6IENvdWxkIGVsaW1pbmF0ZSB0aGUgaXNSb290KCkgY2hlY2sg
aWYgd2UgZml4IGJhY2tncm91bmQgcGFpbnRpbmcgc28gdGhhdCB0aGUgUmVuZGVyVmlldwogICAg
IC8vIHBhaW50cyB0aGUgcm9vdCdzIGJhY2tncm91bmQuCiAgICAgaWYgKCFpc0lubGluZUZsb3co
KSAmJiAhaXNSb290KCkpIHsKICAgICAgICAgSW50UmVjdCBvdmVyZmxvd0JveCA9IG92ZXJmbG93
UmVjdChmYWxzZSk7Ci0gICAgICAgIG92ZXJmbG93Qm94LmluZmxhdGUobWF4aW1hbE91dGxpbmVT
aXplKGkucGhhc2UpKTsKLSAgICAgICAgb3ZlcmZsb3dCb3gubW92ZShfdHgsIF90eSk7Ci0gICAg
ICAgIGJvb2wgaW50ZXJzZWN0c092ZXJmbG93Qm94ID0gb3ZlcmZsb3dCb3guaW50ZXJzZWN0cyhp
LnIpOworICAgICAgICBvdmVyZmxvd0JveC5pbmZsYXRlKG1heGltYWxPdXRsaW5lU2l6ZShwYWlu
dEluZm8ucGhhc2UpKTsKKyAgICAgICAgb3ZlcmZsb3dCb3gubW92ZSh0eCwgdHkpOworICAgICAg
ICBib29sIGludGVyc2VjdHNPdmVyZmxvd0JveCA9IG92ZXJmbG93Qm94LmludGVyc2VjdHMocGFp
bnRJbmZvLnJlY3QpOwogICAgICAgICBpZiAoIWludGVyc2VjdHNPdmVyZmxvd0JveCkgewogICAg
ICAgICAgICAgLy8gQ2hlY2sgZmxvYXRzIG5leHQuCi0gICAgICAgICAgICBpZiAoaS5waGFzZSAh
PSBQYWludFBoYXNlRmxvYXQgJiYgaS5waGFzZSAhPSBQYWludFBoYXNlU2VsZWN0aW9uKQorICAg
ICAgICAgICAgaWYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRmxvYXQgJiYgcGFpbnRJ
bmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgSW50UmVjdCBmbG9hdEJveCA9IGZsb2F0UmVjdCgpOwotICAgICAgICAg
ICAgZmxvYXRCb3guaW5mbGF0ZShtYXhpbWFsT3V0bGluZVNpemUoaS5waGFzZSkpOwotICAgICAg
ICAgICAgZmxvYXRCb3gubW92ZShfdHgsIF90eSk7Ci0gICAgICAgICAgICBpZiAoIWZsb2F0Qm94
LmludGVyc2VjdHMoaS5yKSkKKyAgICAgICAgICAgIGZsb2F0Qm94LmluZmxhdGUobWF4aW1hbE91
dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSkpOworICAgICAgICAgICAgZmxvYXRCb3gubW92ZSh0
eCwgdHkpOworICAgICAgICAgICAgaWYgKCFmbG9hdEJveC5pbnRlcnNlY3RzKHBhaW50SW5mby5y
ZWN0KSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBy
ZXR1cm4gcGFpbnRPYmplY3QoaSwgX3R4LCBfdHkpOworICAgIHJldHVybiBwYWludE9iamVjdChw
YWludEluZm8sIHR4LCB0eSk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4o
UGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KQordm9pZCBSZW5kZXJCbG9jazo6cGFpbnRD
aGlsZHJlbihQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgLy8g
QXZvaWQgcGFpbnRpbmcgZGVzY2VuZGFudHMgb2YgdGhlIHJvb3QgZWxlbWVudCB3aGVuIHN0eWxl
c2hlZXRzIGhhdmVuJ3QgbG9hZGVkLiAgVGhpcyBlbGltaW5hdGVzIEZPVUMuCiAgICAgLy8gSXQn
cyBvayBub3QgdG8gZHJhdywgYmVjYXVzZSBsYXRlciBvbiwgd2hlbiBhbGwgdGhlIHN0eWxlc2hl
ZXRzIGRvIGxvYWQsIHVwZGF0ZVN0eWxlU2VsZWN0b3Igb24gdGhlIERvY3VtZW50CkBAIC0xMjc5
LDUzICsxMjc5LDUyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYK
ICAgICBpZiAoZG9jdW1lbnQoKS0+ZGlkTGF5b3V0V2l0aFBlbmRpbmdTdHlsZXNoZWV0cygpICYm
ICFpc1JlbmRlclZpZXcoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFBhaW50UGhhc2Ug
bmV3UGhhc2UgPSAoaS5waGFzZSA9PSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lcykgPyBQYWludFBo
YXNlT3V0bGluZSA6IGkucGhhc2U7CisgICAgUGFpbnRQaGFzZSBuZXdQaGFzZSA9IChwYWludElu
Zm8ucGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkT3V0bGluZXMpID8gUGFpbnRQaGFzZU91dGxpbmUg
OiBwYWludEluZm8ucGhhc2U7CiAgICAgbmV3UGhhc2UgPSAobmV3UGhhc2UgPT0gUGFpbnRQaGFz
ZUNoaWxkQmxvY2tCYWNrZ3JvdW5kcykgPyBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmQg
OiBuZXdQaGFzZTsKICAgICAKICAgICAvLyBXZSBkb24ndCBwYWludCBvdXIgb3duIGJhY2tncm91
bmQsIGJ1dCB3ZSBkbyBsZXQgdGhlIGtpZHMgcGFpbnQgdGhlaXIgYmFja2dyb3VuZHMuCi0gICAg
UGFpbnRJbmZvIHBhaW50SW5mbyhpKTsKLSAgICBwYWludEluZm8ucGhhc2UgPSBuZXdQaGFzZTsK
KyAgICBQYWludEluZm8gaW5mbyhwYWludEluZm8pOworICAgIGluZm8ucGhhc2UgPSBuZXdQaGFz
ZTsKICAgICBib29sIGlzUHJpbnRpbmcgPSBkb2N1bWVudCgpLT5wcmludGluZygpOwogCi0gICAg
Zm9yIChSZW5kZXJPYmplY3QgKmNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkgeyAgICAgICAgCisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNo
aWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkg
eyAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIGZvciBwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlz
LCBhbmQgaWYgaXQncyBzZXQsIGJyZWFrIGFuZCBiYWlsLgogICAgICAgICBpZiAoaXNQcmludGlu
ZyAmJiAhY2hpbGRyZW5JbmxpbmUoKSAmJiBjaGlsZC0+c3R5bGUoKS0+cGFnZUJyZWFrQmVmb3Jl
KCkgPT0gUEJBTFdBWVMgJiYKLSAgICAgICAgICAgIGluUm9vdEJsb2NrQ29udGV4dCgpICYmIChf
dHkgKyBjaGlsZC0+eVBvcygpKSA+IGkuci55KCkgJiYgCi0gICAgICAgICAgICAoX3R5ICsgY2hp
bGQtPnlQb3MoKSkgPCBpLnIuYm90dG9tKCkpIHsKLSAgICAgICAgICAgIHZpZXcoKS0+c2V0QmVz
dFRydW5jYXRlZEF0KF90eSArIGNoaWxkLT55UG9zKCksIHRoaXMsIHRydWUpOworICAgICAgICAg
ICAgaW5Sb290QmxvY2tDb250ZXh0KCkgJiYgKHR5ICsgY2hpbGQtPnlQb3MoKSkgPiBwYWludElu
Zm8ucmVjdC55KCkgJiYgCisgICAgICAgICAgICAodHkgKyBjaGlsZC0+eVBvcygpKSA8IHBhaW50
SW5mby5yZWN0LmJvdHRvbSgpKSB7CisgICAgICAgICAgICB2aWV3KCktPnNldEJlc3RUcnVuY2F0
ZWRBdCh0eSArIGNoaWxkLT55UG9zKCksIHRoaXMsIHRydWUpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghY2hpbGQtPmxheWVyKCkgJiYg
IWNoaWxkLT5pc0Zsb2F0aW5nKCkpCi0gICAgICAgICAgICBjaGlsZC0+cGFpbnQocGFpbnRJbmZv
LCBfdHgsIF90eSk7Ci0gICAgICAgIAorICAgICAgICAgICAgY2hpbGQtPnBhaW50KGluZm8sIHR4
LCB0eSk7CisKICAgICAgICAgLy8gQ2hlY2sgZm9yIHBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5cywg
YW5kIGlmIGl0J3Mgc2V0LCBicmVhayBhbmQgYmFpbC4KICAgICAgICAgaWYgKGlzUHJpbnRpbmcg
JiYgIWNoaWxkcmVuSW5saW5lKCkgJiYgY2hpbGQtPnN0eWxlKCktPnBhZ2VCcmVha0FmdGVyKCkg
PT0gUEJBTFdBWVMgJiYgCi0gICAgICAgICAgICBpblJvb3RCbG9ja0NvbnRleHQoKSAmJiAoX3R5
ICsgY2hpbGQtPnlQb3MoKSArIGNoaWxkLT5oZWlnaHQoKSkgPiBpLnIueSgpICYmIAotICAgICAg
ICAgICAgKF90eSArIGNoaWxkLT55UG9zKCkgKyBjaGlsZC0+aGVpZ2h0KCkpIDwgaS5yLmJvdHRv
bSgpKSB7Ci0gICAgICAgICAgICB2aWV3KCktPnNldEJlc3RUcnVuY2F0ZWRBdChfdHkgKyBjaGls
ZC0+eVBvcygpICsgY2hpbGQtPmhlaWdodCgpICsgY2hpbGQtPmNvbGxhcHNlZE1hcmdpbkJvdHRv
bSgpLCB0aGlzLCB0cnVlKTsKKyAgICAgICAgICAgIGluUm9vdEJsb2NrQ29udGV4dCgpICYmICh0
eSArIGNoaWxkLT55UG9zKCkgKyBjaGlsZC0+aGVpZ2h0KCkpID4gcGFpbnRJbmZvLnJlY3QueSgp
ICYmIAorICAgICAgICAgICAgKHR5ICsgY2hpbGQtPnlQb3MoKSArIGNoaWxkLT5oZWlnaHQoKSkg
PCBwYWludEluZm8ucmVjdC5ib3R0b20oKSkgeworICAgICAgICAgICAgdmlldygpLT5zZXRCZXN0
VHJ1bmNhdGVkQXQodHkgKyBjaGlsZC0+eVBvcygpICsgY2hpbGQtPmhlaWdodCgpICsgY2hpbGQt
PmNvbGxhcHNlZE1hcmdpbkJvdHRvbSgpLCB0aGlzLCB0cnVlKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDYXJldChQ
YWludEluZm8mIGksIENhcmV0VHlwZSB0eXBlKQordm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDYXJl
dChQYWludEluZm8mIHBhaW50SW5mbywgQ2FyZXRUeXBlIHR5cGUpCiB7CiAgICAgU2VsZWN0aW9u
Q29udHJvbGxlciogc2VsZWN0aW9uQ29udHJvbGxlciA9IHR5cGUgPT0gQ3Vyc29yQ2FyZXQgPyBk
b2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb25Db250cm9sbGVyKCkgOiBkb2N1bWVudCgpLT5m
cmFtZSgpLT5kcmFnQ2FyZXRDb250cm9sbGVyKCk7Ci0gICAgTm9kZSAqY2FyZXROb2RlID0gc2Vs
ZWN0aW9uQ29udHJvbGxlci0+c3RhcnQoKS5ub2RlKCk7Ci0gICAgUmVuZGVyT2JqZWN0ICpyZW5k
ZXJlciA9IGNhcmV0Tm9kZSA/IGNhcmV0Tm9kZS0+cmVuZGVyZXIoKSA6IDA7CisgICAgTm9kZSog
Y2FyZXROb2RlID0gc2VsZWN0aW9uQ29udHJvbGxlci0+c3RhcnQoKS5ub2RlKCk7CisgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IGNhcmV0Tm9kZSA/IGNhcmV0Tm9kZS0+cmVuZGVyZXIoKSA6
IDA7CiAgICAgaWYgKHJlbmRlcmVyICYmIChyZW5kZXJlciA9PSB0aGlzIHx8IHJlbmRlcmVyLT5j
b250YWluaW5nQmxvY2soKSA9PSB0aGlzKSAmJiBjYXJldE5vZGUgJiYgY2FyZXROb2RlLT5pc0Nv
bnRlbnRFZGl0YWJsZSgpKSB7Ci0gICAgICAgIGlmICh0eXBlID09IEN1cnNvckNhcmV0KSB7Ci0g
ICAgICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgpLT5wYWludENhcmV0KGkucCwgaS5yKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPnBhaW50RHJh
Z0NhcmV0KGkucCwgaS5yKTsKLSAgICAgICAgfQorICAgICAgICBpZiAodHlwZSA9PSBDdXJzb3JD
YXJldCkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPnBhaW50Q2FyZXQocGFpbnRJ
bmZvLmNvbnRleHQsIHBhaW50SW5mby5yZWN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+cGFpbnREcmFnQ2FyZXQocGFpbnRJbmZvLmNvbnRleHQsIHBh
aW50SW5mby5yZWN0KTsKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0
KFBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSkKK3ZvaWQgUmVuZGVyQmxvY2s6OnBhaW50
T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICBQYWlu
dFBoYXNlIHBhaW50UGhhc2UgPSBpLnBoYXNlOworICAgIFBhaW50UGhhc2UgcGFpbnRQaGFzZSA9
IHBhaW50SW5mby5waGFzZTsKIAogICAgIC8vIElmIHdlJ3JlIGEgcmVwb3NpdGlvbmVkIHJ1bi1p
biBvciBhIGNvbXBhY3QsIGRvbid0IHBhaW50IGJhY2tncm91bmQvYm9yZGVycy4KICAgICBib29s
IGlubGluZUZsb3cgPSBpc0lubGluZUZsb3coKTsKQEAgLTEzMzQsNyArMTMzMyw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KFBhaW50SW5mbyYKICAgICBpZiAoIWlubGluZUZsb3cg
JiYKICAgICAgICAgKHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCB8fCBw
YWludFBoYXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYKICAgICAgICAg
c2hvdWxkUGFpbnRCYWNrZ3JvdW5kT3JCb3JkZXIoKSAmJiBzdHlsZSgpLT52aXNpYmlsaXR5KCkg
PT0gVklTSUJMRSkgewotICAgICAgICBwYWludEJveERlY29yYXRpb25zKGksIF90eCwgX3R5KTsK
KyAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIHR4LCB0eSk7CiAgICAgfQog
CiAgICAgLy8gV2UncmUgZG9uZS4gIFdlIGRvbid0IGJvdGhlciBwYWludGluZyBhbnkgY2hpbGRy
ZW4uCkBAIC0xMzQyLDEwMyArMTM0MSwxMDMgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRPYmpl
Y3QoUGFpbnRJbmZvJgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBBZGp1c3Qgb3VyIHBhaW50
aW5nIHBvc2l0aW9uIGlmIHdlJ3JlIGluc2lkZSBhIHNjcm9sbGVkIGxheWVyIChlLmcuLCBhbiBv
dmVyZmxvdzphdXRvIGRpdikucwotICAgIGludCBzY3JvbGxlZFggPSBfdHg7Ci0gICAgaW50IHNj
cm9sbGVkWSA9IF90eTsKKyAgICBpbnQgc2Nyb2xsZWRYID0gdHg7CisgICAgaW50IHNjcm9sbGVk
WSA9IHR5OwogICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgbV9sYXllci0+c3Vi
dHJhY3RTY3JvbGxPZmZzZXQoc2Nyb2xsZWRYLCBzY3JvbGxlZFkpOwogCiAgICAgLy8gMi4gcGFp
bnQgY29udGVudHMKICAgICBpZiAocGFpbnRQaGFzZSAhPSBQYWludFBoYXNlU2VsZk91dGxpbmUp
IHsKICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCi0gICAgICAgICAgICBwYWludExpbmVz
KGksIHNjcm9sbGVkWCwgc2Nyb2xsZWRZKTsKKyAgICAgICAgICAgIHBhaW50TGluZXMocGFpbnRJ
bmZvLCBzY3JvbGxlZFgsIHNjcm9sbGVkWSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHBh
aW50Q2hpbGRyZW4oaSwgc2Nyb2xsZWRYLCBzY3JvbGxlZFkpOworICAgICAgICAgICAgcGFpbnRD
aGlsZHJlbihwYWludEluZm8sIHNjcm9sbGVkWCwgc2Nyb2xsZWRZKTsKICAgICB9Ci0gICAgCisK
ICAgICAvLyAzLiBwYWludCBzZWxlY3Rpb24KICAgICBib29sIGlzUHJpbnRpbmcgPSBkb2N1bWVu
dCgpLT5wcmludGluZygpOwogICAgIGlmICghaW5saW5lRmxvdyAmJiAhaXNQcmludGluZykKLSAg
ICAgICAgcGFpbnRTZWxlY3Rpb24oaSwgc2Nyb2xsZWRYLCBzY3JvbGxlZFkpOyAvLyBGaWxsIGlu
IGdhcHMgaW4gc2VsZWN0aW9uIG9uIGxpbmVzIGFuZCBiZXR3ZWVuIGJsb2Nrcy4KKyAgICAgICAg
cGFpbnRTZWxlY3Rpb24ocGFpbnRJbmZvLCBzY3JvbGxlZFgsIHNjcm9sbGVkWSk7IC8vIEZpbGwg
aW4gZ2FwcyBpbiBzZWxlY3Rpb24gb24gbGluZXMgYW5kIGJldHdlZW4gYmxvY2tzLgogCiAgICAg
Ly8gNC4gcGFpbnQgZmxvYXRzLgogICAgIGlmICghaW5saW5lRmxvdyAmJiAocGFpbnRQaGFzZSA9
PSBQYWludFBoYXNlRmxvYXQgfHwgcGFpbnRQaGFzZSA9PSBQYWludFBoYXNlU2VsZWN0aW9uKSkK
LSAgICAgICAgcGFpbnRGbG9hdHMoaSwgc2Nyb2xsZWRYLCBzY3JvbGxlZFksIHBhaW50UGhhc2Ug
PT0gUGFpbnRQaGFzZVNlbGVjdGlvbik7CisgICAgICAgIHBhaW50RmxvYXRzKHBhaW50SW5mbywg
c2Nyb2xsZWRYLCBzY3JvbGxlZFksIHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbik7
CiAKICAgICAvLyA1LiBwYWludCBvdXRsaW5lLgogICAgIGlmICghaW5saW5lRmxvdyAmJiAocGFp
bnRQaGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBwYWludFBoYXNlID09IFBhaW50UGhhc2VT
ZWxmT3V0bGluZSkgCiAgICAgICAgICYmIGhhc091dGxpbmUoKSAmJiBzdHlsZSgpLT52aXNpYmls
aXR5KCkgPT0gVklTSUJMRSkKLSAgICAgICAgUmVuZGVyT2JqZWN0OjpwYWludE91dGxpbmUoaS5w
LCBfdHgsIF90eSwgd2lkdGgoKSwgaGVpZ2h0KCksIHN0eWxlKCkpOworICAgICAgICBSZW5kZXJP
YmplY3Q6OnBhaW50T3V0bGluZShwYWludEluZm8uY29udGV4dCwgdHgsIHR5LCB3aWR0aCgpLCBo
ZWlnaHQoKSwgc3R5bGUoKSk7CiAKICAgICAvLyA2LiBwYWludCBjYXJldC4KICAgICAvLyBJZiB0
aGUgY2FyZXQncyBub2RlJ3MgcmVuZGVyIG9iamVjdCdzIGNvbnRhaW5pbmcgYmxvY2sgaXMgdGhp
cyBibG9jaywgYW5kIHRoZSBwYWludCBhY3Rpb24gaXMgUGFpbnRQaGFzZUZvcmVncm91bmQsCiAg
ICAgLy8gdGhlbiBwYWludCB0aGUgY2FyZXQuCiAgICAgaWYgKCFpbmxpbmVGbG93ICYmIHBhaW50
UGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsgICAgICAgIAotICAgICAgICBwYWludENh
cmV0KGksIEN1cnNvckNhcmV0KTsKLSAgICAgICAgcGFpbnRDYXJldChpLCBEcmFnQ2FyZXQpOwor
ICAgICAgICBwYWludENhcmV0KHBhaW50SW5mbywgQ3Vyc29yQ2FyZXQpOworICAgICAgICBwYWlu
dENhcmV0KHBhaW50SW5mbywgRHJhZ0NhcmV0KTsKICAgICB9CiAKICNpZmRlZiBCT1hfREVCVUcK
LSAgICBpZiAoIHN0eWxlKCkgJiYgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUgKSB7
CisgICAgaWYgKHN0eWxlKCkgJiYgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsK
ICAgICAgICAgaWYoaXNBbm9ueW1vdXMoKSkKLSAgICAgICAgICAgIG91dGxpbmVCb3goaS5wLCBf
dHgsIF90eSwgImdyZWVuIik7CisgICAgICAgICAgICBvdXRsaW5lQm94KHBhaW50SW5mby5jb250
ZXh0LCB0eCwgdHksICJncmVlbiIpOwogICAgICAgICBpZihpc0Zsb2F0aW5nKCkpCi0gICAgICAg
ICAgICBvdXRsaW5lQm94KGkucCwgX3R4LCBfdHksICJ5ZWxsb3ciKTsKKyAgICAgICAgICAgIG91
dGxpbmVCb3gocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgInllbGxvdyIpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBvdXRsaW5lQm94KGkucCwgX3R4LCBfdHkpOworICAgICAgICAgICAg
b3V0bGluZUJveChwYWludEluZm8uY29udGV4dCwgdHgsIHR5KTsKICAgICB9CiAjZW5kaWYKIH0K
IAotdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRGbG9hdHMoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBp
bnQgX3R5LCBib29sIHBhaW50U2VsZWN0aW9uKQordm9pZCBSZW5kZXJCbG9jazo6cGFpbnRGbG9h
dHMoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5LCBib29sIHBhaW50U2VsZWN0
aW9uKQogewogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEZsb2F0aW5nT2JqZWN0KiByOwogICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8Rmxv
YXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7Ci0gICAgZm9yICggOyAociA9IGl0
LmN1cnJlbnQoKSk7ICsraXQpIHsKKyAgICBmb3IgKDsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0
KSB7CiAgICAgICAgIC8vIE9ubHkgcGFpbnQgdGhlIG9iamVjdCBpZiBvdXIgbm9QYWludCBmbGFn
IGlzbid0IHNldC4KICAgICAgICAgaWYgKCFyLT5ub1BhaW50ICYmICFyLT5ub2RlLT5sYXllcigp
KSB7Ci0gICAgICAgICAgICBQYWludEluZm8gaW5mbyhpKTsKLSAgICAgICAgICAgIGluZm8ucGhh
c2UgPSBwYWludFNlbGVjdGlvbiA/IFBhaW50UGhhc2VTZWxlY3Rpb24gOiBQYWludFBoYXNlQmxv
Y2tCYWNrZ3JvdW5kOwotICAgICAgICAgICAgaW50IHR4ID0gX3R4ICsgci0+bGVmdCAtIHItPm5v
ZGUtPnhQb3MoKSArIHItPm5vZGUtPm1hcmdpbkxlZnQoKTsKLSAgICAgICAgICAgIGludCB0eSA9
IF90eSArIHItPnN0YXJ0WSAtIHItPm5vZGUtPnlQb3MoKSArIHItPm5vZGUtPm1hcmdpblRvcCgp
OwotICAgICAgICAgICAgci0+bm9kZS0+cGFpbnQoaW5mbywgdHgsIHR5KTsKKyAgICAgICAgICAg
IFBhaW50SW5mbyBjdXJyZW50UGFpbnRJbmZvKHBhaW50SW5mbyk7CisgICAgICAgICAgICBjdXJy
ZW50UGFpbnRJbmZvLnBoYXNlID0gcGFpbnRTZWxlY3Rpb24gPyBQYWludFBoYXNlU2VsZWN0aW9u
IDogUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZDsKKyAgICAgICAgICAgIGludCBjdXJyZW50VFgg
PSB0eCArIHItPmxlZnQgLSByLT5ub2RlLT54UG9zKCkgKyByLT5ub2RlLT5tYXJnaW5MZWZ0KCk7
CisgICAgICAgICAgICBpbnQgY3VycmVudFRZID0gdHkgKyByLT5zdGFydFkgLSByLT5ub2RlLT55
UG9zKCkgKyByLT5ub2RlLT5tYXJnaW5Ub3AoKTsKKyAgICAgICAgICAgIHItPm5vZGUtPnBhaW50
KGN1cnJlbnRQYWludEluZm8sIGN1cnJlbnRUWCwgY3VycmVudFRZKTsKICAgICAgICAgICAgIGlm
ICghcGFpbnRTZWxlY3Rpb24pIHsKLSAgICAgICAgICAgICAgICBpbmZvLnBoYXNlID0gUGFpbnRQ
aGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kczsKLSAgICAgICAgICAgICAgICByLT5ub2RlLT5wYWlu
dChpbmZvLCB0eCwgdHkpOwotICAgICAgICAgICAgICAgIGluZm8ucGhhc2UgPSBQYWludFBoYXNl
RmxvYXQ7Ci0gICAgICAgICAgICAgICAgci0+bm9kZS0+cGFpbnQoaW5mbywgdHgsIHR5KTsKLSAg
ICAgICAgICAgICAgICBpbmZvLnBoYXNlID0gUGFpbnRQaGFzZUZvcmVncm91bmQ7Ci0gICAgICAg
ICAgICAgICAgci0+bm9kZS0+cGFpbnQoaW5mbywgdHgsIHR5KTsKLSAgICAgICAgICAgICAgICBp
bmZvLnBoYXNlID0gUGFpbnRQaGFzZU91dGxpbmU7Ci0gICAgICAgICAgICAgICAgci0+bm9kZS0+
cGFpbnQoaW5mbywgdHgsIHR5KTsKKyAgICAgICAgICAgICAgICBjdXJyZW50UGFpbnRJbmZvLnBo
YXNlID0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kczsKKyAgICAgICAgICAgICAgICBy
LT5ub2RlLT5wYWludChjdXJyZW50UGFpbnRJbmZvLCBjdXJyZW50VFgsIGN1cnJlbnRUWSk7Cisg
ICAgICAgICAgICAgICAgY3VycmVudFBhaW50SW5mby5waGFzZSA9IFBhaW50UGhhc2VGbG9hdDsK
KyAgICAgICAgICAgICAgICByLT5ub2RlLT5wYWludChjdXJyZW50UGFpbnRJbmZvLCBjdXJyZW50
VFgsIGN1cnJlbnRUWSk7CisgICAgICAgICAgICAgICAgY3VycmVudFBhaW50SW5mby5waGFzZSA9
IFBhaW50UGhhc2VGb3JlZ3JvdW5kOworICAgICAgICAgICAgICAgIHItPm5vZGUtPnBhaW50KGN1
cnJlbnRQYWludEluZm8sIGN1cnJlbnRUWCwgY3VycmVudFRZKTsKKyAgICAgICAgICAgICAgICBj
dXJyZW50UGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZU91dGxpbmU7CisgICAgICAgICAgICAg
ICAgci0+bm9kZS0+cGFpbnQoY3VycmVudFBhaW50SW5mbywgY3VycmVudFRYLCBjdXJyZW50VFkp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFJlbmRlckJsb2Nr
OjpwYWludEVsbGlwc2lzQm94ZXMoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KQordm9p
ZCBSZW5kZXJCbG9jazo6cGFpbnRFbGxpcHNpc0JveGVzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBp
bnQgdHgsIGludCB0eSkKIHsKLSAgICBpZiAoIXNob3VsZFBhaW50V2l0aGluUm9vdChpKSB8fCAh
Zmlyc3RMaW5lQm94KCkpCisgICAgaWYgKCFzaG91bGRQYWludFdpdGhpblJvb3QocGFpbnRJbmZv
KSB8fCAhZmlyc3RMaW5lQm94KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChzdHlsZSgp
LT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSAmJiBpLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3Jv
dW5kKSB7CisgICAgaWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmIHBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewogICAgICAgICAvLyBXZSBjYW4g
Y2hlY2sgdGhlIGZpcnN0IGJveCBhbmQgbGFzdCBib3ggYW5kIGF2b2lkIHBhaW50aW5nIGlmIHdl
IGRvbid0CiAgICAgICAgIC8vIGludGVyc2VjdC4KLSAgICAgICAgaW50IHlQb3MgPSBfdHkgKyBm
aXJzdExpbmVCb3goKS0+eVBvcygpOzsKKyAgICAgICAgaW50IHlQb3MgPSB0eSArIGZpcnN0TGlu
ZUJveCgpLT55UG9zKCk7OwogICAgICAgICBpbnQgaCA9IGxhc3RMaW5lQm94KCktPnlQb3MoKSAr
IGxhc3RMaW5lQm94KCktPmhlaWdodCgpIC0gZmlyc3RMaW5lQm94KCktPnlQb3MoKTsKLSAgICAg
ICAgaWYgKHlQb3MgPj0gaS5yLmJvdHRvbSgpIHx8IHlQb3MgKyBoIDw9IGkuci55KCkpCisgICAg
ICAgIGlmICh5UG9zID49IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpIHx8IHlQb3MgKyBoIDw9IHBh
aW50SW5mby5yZWN0LnkoKSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBTZWUg
aWYgb3VyIGJveGVzIGludGVyc2VjdCB3aXRoIHRoZSBkaXJ0eSByZWN0LiAgSWYgc28sIHRoZW4g
d2UgcGFpbnQKICAgICAgICAgLy8gdGhlbS4gIE5vdGUgdGhhdCBib3hlcyBjYW4gZWFzaWx5IG92
ZXJsYXAsIHNvIHdlIGNhbid0IG1ha2UgYW55IGFzc3VtcHRpb25zCiAgICAgICAgIC8vIGJhc2Vk
IG9mZiBwb3NpdGlvbnMgb2Ygb3VyIGZpcnN0IGxpbmUgYm94IG9yIG91ciBsYXN0IGxpbmUgYm94
LgogICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGN1cnIgPSBmaXJzdFJvb3RCb3goKTsgY3Vy
cjsgY3VyciA9IGN1cnItPm5leHRSb290Qm94KCkpIHsKLSAgICAgICAgICAgIHlQb3MgPSBfdHkg
KyBjdXJyLT55UG9zKCk7CisgICAgICAgICAgICB5UG9zID0gdHkgKyBjdXJyLT55UG9zKCk7CiAg
ICAgICAgICAgICBoID0gY3Vyci0+aGVpZ2h0KCk7Ci0gICAgICAgICAgICBpZiAoY3Vyci0+ZWxs
aXBzaXNCb3goKSAmJiB5UG9zIDwgaS5yLmJvdHRvbSgpICYmIHlQb3MgKyBoID4gaS5yLnkoKSkK
LSAgICAgICAgICAgICAgICBjdXJyLT5wYWludEVsbGlwc2lzQm94KGksIF90eCwgX3R5KTsKKyAg
ICAgICAgICAgIGlmIChjdXJyLT5lbGxpcHNpc0JveCgpICYmIHlQb3MgPCBwYWludEluZm8ucmVj
dC5ib3R0b20oKSAmJiB5UG9zICsgaCA+IHBhaW50SW5mby5yZWN0LnkoKSkKKyAgICAgICAgICAg
ICAgICBjdXJyLT5wYWludEVsbGlwc2lzQm94KHBhaW50SW5mbywgdHgsIHR5KTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTE1MDQsMTggKzE1MDMsMTggQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6
OnNlbGVjdGlvbkdhcFJlY3RzKAogICAgIHJldHVybiBmaWxsU2VsZWN0aW9uR2Fwcyh0aGlzLCB0
eCwgdHksIHR4LCB0eSwgbGFzdFRvcCwgbGFzdExlZnQsIGxhc3RSaWdodCk7CiB9CiAKLXZvaWQg
UmVuZGVyQmxvY2s6OnBhaW50U2VsZWN0aW9uKFBhaW50SW5mbyYgaSwgaW50IHR4LCBpbnQgdHkp
Cit2b2lkIFJlbmRlckJsb2NrOjpwYWludFNlbGVjdGlvbihQYWludEluZm8mIHBhaW50SW5mbywg
aW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgaWYgKHNob3VsZFBhaW50U2VsZWN0aW9uR2FwcygpICYm
IGkucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKKyAgICBpZiAoc2hvdWxkUGFpbnRT
ZWxlY3Rpb25HYXBzKCkgJiYgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5k
KSB7CiAgICAgICAgIGludCBsYXN0VG9wID0gLWJvcmRlclRvcEV4dHJhKCk7CiAgICAgICAgIGlu
dCBsYXN0TGVmdCA9IGxlZnRTZWxlY3Rpb25PZmZzZXQodGhpcywgbGFzdFRvcCk7CiAgICAgICAg
IGludCBsYXN0UmlnaHQgPSByaWdodFNlbGVjdGlvbk9mZnNldCh0aGlzLCBsYXN0VG9wKTsKLSAg
ICAgICAgZmlsbFNlbGVjdGlvbkdhcHModGhpcywgdHgsIHR5LCB0eCwgdHksIGxhc3RUb3AsIGxh
c3RMZWZ0LCBsYXN0UmlnaHQsICZpKTsKKyAgICAgICAgZmlsbFNlbGVjdGlvbkdhcHModGhpcywg
dHgsIHR5LCB0eCwgdHksIGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0UmlnaHQsICZwYWludEluZm8p
OwogICAgIH0KIH0KIAotR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmZpbGxTZWxlY3Rpb25HYXBzKFJl
bmRlckJsb2NrKiByb290QmxvY2ssIGludCBibG9ja1gsIGludCBibG9ja1ksIGludCB0eCwgaW50
IHR5LCBpbnQmIGxhc3RUb3AsIGludCYgbGFzdExlZnQsIGludCYgbGFzdFJpZ2h0LCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQYWludEluZm8qIGkpCitH
YXBSZWN0cyBSZW5kZXJCbG9jazo6ZmlsbFNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RC
bG9jaywgaW50IGJsb2NrWCwgaW50IGJsb2NrWSwgaW50IHR4LCBpbnQgdHksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBsYXN0VG9wLCBpbnQmIGxhc3RMZWZ0
LCBpbnQmIGxhc3RSaWdodCwgY29uc3QgUGFpbnRJbmZvKiBwYWludEluZm8pCiB7CiAgICAgLy8g
RklYTUU6IG92ZXJmbG93OiBhdXRvL3Njcm9sbCByZWdpb25zIG5lZWQgbW9yZSBtYXRoIGhlcmUs
IHNpbmNlIHBhaW50aW5nIGluIHRoZSBib3JkZXIgYm94IGlzIGRpZmZlcmVudCBmcm9tIHBhaW50
aW5nIGluIHRoZSBwYWRkaW5nIGJveCAob25lIGlzIHNjcm9sbGVkLCB0aGUgb3RoZXIgaXMKICAg
ICAvLyBmaXhlZCkuCkBAIC0xNTI0LDIyICsxNTIzLDIyIEBAIEdhcFJlY3RzIFJlbmRlckJsb2Nr
OjpmaWxsU2VsZWN0aW9uR2FwcygKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgIGlmIChj
aGlsZHJlbklubGluZSgpKQotICAgICAgICByZXN1bHQgPSBmaWxsSW5saW5lU2VsZWN0aW9uR2Fw
cyhyb290QmxvY2ssIGJsb2NrWCwgYmxvY2tZLCB0eCwgdHksIGxhc3RUb3AsIGxhc3RMZWZ0LCBs
YXN0UmlnaHQsIGkpOworICAgICAgICByZXN1bHQgPSBmaWxsSW5saW5lU2VsZWN0aW9uR2Fwcyhy
b290QmxvY2ssIGJsb2NrWCwgYmxvY2tZLCB0eCwgdHksIGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0
UmlnaHQsIHBhaW50SW5mbyk7CiAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBmaWxsQmxvY2tT
ZWxlY3Rpb25HYXBzKHJvb3RCbG9jaywgYmxvY2tYLCBibG9ja1ksIHR4LCB0eSwgbGFzdFRvcCwg
bGFzdExlZnQsIGxhc3RSaWdodCwgaSk7Ci0gICAgICAgIAorICAgICAgICByZXN1bHQgPSBmaWxs
QmxvY2tTZWxlY3Rpb25HYXBzKHJvb3RCbG9jaywgYmxvY2tYLCBibG9ja1ksIHR4LCB0eSwgbGFz
dFRvcCwgbGFzdExlZnQsIGxhc3RSaWdodCwgcGFpbnRJbmZvKTsKKwogICAgIC8vIEdvIGFoZWFk
IGFuZCBmaWxsIHRoZSB2ZXJ0aWNhbCBnYXAgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbSBvZiBv
dXIgYmxvY2sgaWYgdGhlIHNlbGVjdGlvbiBleHRlbmRzIHBhc3Qgb3VyIGJsb2NrLgogICAgIGlm
IChyb290QmxvY2sgPT0gdGhpcyAmJiAobV9zZWxlY3Rpb25TdGF0ZSAhPSBTZWxlY3Rpb25Cb3Ro
ICYmIG1fc2VsZWN0aW9uU3RhdGUgIT0gU2VsZWN0aW9uRW5kKSkKICAgICAgICAgcmVzdWx0LnVu
aXRlQ2VudGVyKGZpbGxWZXJ0aWNhbFNlbGVjdGlvbkdhcChsYXN0VG9wLCBsYXN0TGVmdCwgbGFz
dFJpZ2h0LCB0eSArIGhlaWdodCgpICsgYm9yZGVyQm90dG9tRXh0cmEoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290QmxvY2ssIGJsb2Nr
WCwgYmxvY2tZLCBpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgcGFpbnRJbmZvKSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmZpbGxJbmxpbmVTZWxl
Y3Rpb25HYXBzKFJlbmRlckJsb2NrKiByb290QmxvY2ssIGludCBibG9ja1gsIGludCBibG9ja1ks
IGludCB0eCwgaW50IHR5LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQmIGxhc3RUb3AsIGludCYgbGFzdExlZnQsIGludCYgbGFzdFJpZ2h0LCBjb25z
dCBQYWludEluZm8qIGkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50JiBsYXN0VG9wLCBpbnQmIGxhc3RMZWZ0LCBpbnQmIGxhc3RSaWdodCwgY29uc3Qg
UGFpbnRJbmZvKiBwYWludEluZm8pCiB7CiAgICAgR2FwUmVjdHMgcmVzdWx0OwotICAgIAorCiAg
ICAgUmVuZGVyT2JqZWN0KiBzZWxTdGFydCA9IHZpZXcoKS0+c2VsZWN0aW9uU3RhcnQoKTsKICAg
ICAvLyBJZiB0aGVyZSBpcyBubyBzZWxlY3Rpb24sIGRvbid0IHRyeSB0byBnZXQgdGhlIHNlbGVj
dGlvbidzIGNvbnRhaW5pbmcgYmxvY2suIAogICAgIC8vIElmIHdlIGRvLCB3ZSdsbCBjcmFzaC4K
QEAgLTE1NjgsMTAgKzE1NjcsMTAgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmZpbGxJbmxpbmVT
ZWxlY3RpbwogICAgICAgICBpZiAoIWNvbnRhaW5zU3RhcnQgJiYgIWxhc3RTZWxlY3RlZExpbmUg
JiYKICAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uU3RhcnQgJiYgc2Vs
ZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25Cb3RoKQogICAgICAgICAgICAgcmVzdWx0LnVuaXRl
Q2VudGVyKGZpbGxWZXJ0aWNhbFNlbGVjdGlvbkdhcChsYXN0VG9wLCBsYXN0TGVmdCwgbGFzdFJp
Z2h0LCB0eSArIHNlbFRvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgaSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290Qmxv
Y2ssIGJsb2NrWCwgYmxvY2tZLCBwYWludEluZm8pKTsKIAotICAgICAgICBpZiAoIWkgfHwgdHkg
KyBzZWxUb3AgPCBpLT5yLmJvdHRvbSgpICYmIHR5ICsgc2VsVG9wICsgc2VsSGVpZ2h0ID4gaS0+
ci55KCkpCi0gICAgICAgICAgICByZXN1bHQudW5pdGUoY3Vyci0+ZmlsbExpbmVTZWxlY3Rpb25H
YXAoc2VsVG9wLCBzZWxIZWlnaHQsIHJvb3RCbG9jaywgYmxvY2tYLCBibG9ja1ksIHR4LCB0eSwg
aSkpOworICAgICAgICBpZiAoIXBhaW50SW5mbyB8fCB0eSArIHNlbFRvcCA8IHBhaW50SW5mby0+
cmVjdC5ib3R0b20oKSAmJiB0eSArIHNlbFRvcCArIHNlbEhlaWdodCA+IHBhaW50SW5mby0+cmVj
dC55KCkpCisgICAgICAgICAgICByZXN1bHQudW5pdGUoY3Vyci0+ZmlsbExpbmVTZWxlY3Rpb25H
YXAoc2VsVG9wLCBzZWxIZWlnaHQsIHJvb3RCbG9jaywgYmxvY2tYLCBibG9ja1ksIHR4LCB0eSwg
cGFpbnRJbmZvKSk7CiAKICAgICAgICAgbGFzdFNlbGVjdGVkTGluZSA9IGN1cnI7CiAgICAgfQpA
QCAtMTU4OSwxNSArMTU4OCwxNSBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6ZmlsbElubGluZVNl
bGVjdGlvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmZp
bGxCbG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgaW50IGJsb2NrWCwg
aW50IGJsb2NrWSwgaW50IHR4LCBpbnQgdHksIGludCYgbGFzdFRvcCwgaW50JiBsYXN0TGVmdCwg
aW50JiBsYXN0UmlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBQYWludEluZm8qIGkpCitHYXBSZWN0cyBSZW5kZXJCbG9jazo6ZmlsbEJsb2NrU2Vs
ZWN0aW9uR2FwcyhSZW5kZXJCbG9jayogcm9vdEJsb2NrLCBpbnQgYmxvY2tYLCBpbnQgYmxvY2tZ
LCBpbnQgdHgsIGludCB0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCYgbGFzdFRvcCwgaW50JiBsYXN0TGVmdCwgaW50JiBsYXN0UmlnaHQsIGNvbnN0
IFBhaW50SW5mbyogcGFpbnRJbmZvKQogewogICAgIEdhcFJlY3RzIHJlc3VsdDsKLSAgICAKKwog
ICAgIC8vIEdvIGFoZWFkIGFuZCBqdW1wIHJpZ2h0IHRvIHRoZSBmaXJzdCBibG9jayBjaGlsZCB0
aGF0IGNvbnRhaW5zIHNvbWUgc2VsZWN0ZWQgb2JqZWN0cy4KICAgICBSZW5kZXJPYmplY3QqIGN1
cnI7CiAgICAgZm9yIChjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyICYmIGN1cnItPnNlbGVjdGlv
blN0YXRlKCkgPT0gU2VsZWN0aW9uTm9uZTsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpOwot
ICAgIAorCiAgICAgZm9yIChib29sIHNhd1NlbGVjdGlvbkVuZCA9IGZhbHNlOyBjdXJyICYmICFz
YXdTZWxlY3Rpb25FbmQ7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIFNl
bGVjdGlvblN0YXRlIGNoaWxkU3RhdGUgPSBjdXJyLT5zZWxlY3Rpb25TdGF0ZSgpOwogICAgICAg
ICBpZiAoY2hpbGRTdGF0ZSA9PSBTZWxlY3Rpb25Cb3RoIHx8IGNoaWxkU3RhdGUgPT0gU2VsZWN0
aW9uRW5kKQpAQCAtMTYwNSw3ICsxNjA0LDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmZpbGxC
bG9ja1NlbGVjdGlvbgogCiAgICAgICAgIGlmIChjdXJyLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVk
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gV2UgbXVzdCBiZSBhIG5vcm1hbCBmbG93IG9i
amVjdCBpbiBvcmRlciB0byBldmVuIGJlIGNvbnNpZGVyZWQuCi0gICAgICAgIAorCiAgICAgICAg
IGlmIChjdXJyLT5pc1JlbFBvc2l0aW9uZWQoKSAmJiBjdXJyLT5sYXllcigpKSB7CiAgICAgICAg
ICAgICAvLyBJZiB0aGUgcmVscG9zaXRpb24gb2Zmc2V0IGlzIGFueXRoaW5nIG90aGVyIHRoYW4g
MCwgdGhlbiB0cmVhdCB0aGlzIGp1c3QgbGlrZSBhbiBhYnNvbHV0ZSBwb3NpdGlvbmVkIGVsZW1l
bnQuCiAgICAgICAgICAgICAvLyBKdXN0IGRpc3JlZ2FyZCBpdCBjb21wbGV0ZWx5LgpAQCAtMTYy
Myw3ICsxNjIyLDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmZpbGxCbG9ja1NlbGVjdGlvbgog
ICAgICAgICAgICAgaWYgKGNoaWxkU3RhdGUgPT0gU2VsZWN0aW9uRW5kIHx8IGNoaWxkU3RhdGUg
PT0gU2VsZWN0aW9uSW5zaWRlKQogICAgICAgICAgICAgICAgIC8vIEZpbGwgdGhlIGdhcCBhYm92
ZSB0aGUgb2JqZWN0LgogICAgICAgICAgICAgICAgIHJlc3VsdC51bml0ZUNlbnRlcihmaWxsVmVy
dGljYWxTZWxlY3Rpb25HYXAobGFzdFRvcCwgbGFzdExlZnQsIGxhc3RSaWdodCwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSAr
IGN1cnItPnlQb3MoKSwgcm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgaSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgKyBj
dXJyLT55UG9zKCksIHJvb3RCbG9jaywgYmxvY2tYLCBibG9ja1ksIHBhaW50SW5mbykpOwogCiAg
ICAgICAgICAgICAvLyBPbmx5IGZpbGwgc2lkZSBnYXBzIGZvciBvYmplY3RzIHRoYXQgcGFpbnQg
dGhlaXIgb3duIHNlbGVjdGlvbiBpZiB3ZSBrbm93IGZvciBzdXJlIHRoZSBzZWxlY3Rpb24gaXMg
Z29pbmcgdG8gZXh0ZW5kIGFsbCB0aGUgd2F5ICpwYXN0KgogICAgICAgICAgICAgLy8gb3VyIG9i
amVjdC4gIFdlIGtub3cgdGhpcyBpZiB0aGUgc2VsZWN0aW9uIGRpZCBub3QgZW5kIGluc2lkZSBv
dXIgb2JqZWN0LgpAQCAtMTYzMywxMSArMTYzMiwxMSBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6
ZmlsbEJsb2NrU2VsZWN0aW9uCiAgICAgICAgICAgICAvLyBGaWxsIHNpZGUgZ2FwcyBvbiB0aGlz
IG9iamVjdCBiYXNlZCBvZmYgaXRzIHN0YXRlLgogICAgICAgICAgICAgYm9vbCBsZWZ0R2FwLCBy
aWdodEdhcDsKICAgICAgICAgICAgIGdldEhvcml6b250YWxTZWxlY3Rpb25HYXBJbmZvKGNoaWxk
U3RhdGUsIGxlZnRHYXAsIHJpZ2h0R2FwKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBp
ZiAobGVmdEdhcCkKLSAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVMZWZ0KGZpbGxMZWZ0U2Vs
ZWN0aW9uR2FwKHRoaXMsIGN1cnItPnhQb3MoKSwgY3Vyci0+eVBvcygpLCBjdXJyLT5oZWlnaHQo
KSwgcm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgdHgsIHR5LCBpKSk7CisgICAgICAgICAgICAg
ICAgcmVzdWx0LnVuaXRlTGVmdChmaWxsTGVmdFNlbGVjdGlvbkdhcCh0aGlzLCBjdXJyLT54UG9z
KCksIGN1cnItPnlQb3MoKSwgY3Vyci0+aGVpZ2h0KCksIHJvb3RCbG9jaywgYmxvY2tYLCBibG9j
a1ksIHR4LCB0eSwgcGFpbnRJbmZvKSk7CiAgICAgICAgICAgICBpZiAocmlnaHRHYXApCi0gICAg
ICAgICAgICAgICAgcmVzdWx0LnVuaXRlUmlnaHQoZmlsbFJpZ2h0U2VsZWN0aW9uR2FwKHRoaXMs
IGN1cnItPnhQb3MoKSArIGN1cnItPndpZHRoKCksIGN1cnItPnlQb3MoKSwgY3Vyci0+aGVpZ2h0
KCksIHJvb3RCbG9jaywgYmxvY2tYLCBibG9ja1ksIHR4LCB0eSwgaSkpOworICAgICAgICAgICAg
ICAgIHJlc3VsdC51bml0ZVJpZ2h0KGZpbGxSaWdodFNlbGVjdGlvbkdhcCh0aGlzLCBjdXJyLT54
UG9zKCkgKyBjdXJyLT53aWR0aCgpLCBjdXJyLT55UG9zKCksIGN1cnItPmhlaWdodCgpLCByb290
QmxvY2ssIGJsb2NrWCwgYmxvY2tZLCB0eCwgdHksIHBhaW50SW5mbykpOwogCiAgICAgICAgICAg
ICAvLyBVcGRhdGUgbGFzdFRvcCB0byBiZSBqdXN0IHVuZGVybmVhdGggdGhlIG9iamVjdC4gIGxh
c3RMZWZ0IGFuZCBsYXN0UmlnaHQgZXh0ZW5kIGFzIGZhciBhcwogICAgICAgICAgICAgLy8gdGhl
eSBjYW4gd2l0aG91dCBidW1waW5nIGludG8gZmxvYXRpbmcgb3IgcG9zaXRpb25lZCBvYmplY3Rz
LiAgSWRlYWxseSB0aGV5IHdpbGwgZ28gcmlnaHQgdXAKQEAgLTE2NDUsMzUgKzE2NDQsMzIgQEAg
R2FwUmVjdHMgUmVuZGVyQmxvY2s6OmZpbGxCbG9ja1NlbGVjdGlvbgogICAgICAgICAgICAgbGFz
dFRvcCA9ICh0eSAtIGJsb2NrWSkgKyAoY3Vyci0+eVBvcygpICsgY3Vyci0+aGVpZ2h0KCkpOwog
ICAgICAgICAgICAgbGFzdExlZnQgPSBsZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgY3Vy
ci0+eVBvcygpICsgY3Vyci0+aGVpZ2h0KCkpOwogICAgICAgICAgICAgbGFzdFJpZ2h0ID0gcmln
aHRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBjdXJyLT55UG9zKCkgKyBjdXJyLT5oZWlnaHQo
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY2hpbGRTdGF0ZSAhPSBTZWxlY3Rpb25O
b25lKQorICAgICAgICB9IGVsc2UgaWYgKGNoaWxkU3RhdGUgIT0gU2VsZWN0aW9uTm9uZSkKICAg
ICAgICAgICAgIC8vIFdlIG11c3QgYmUgYSBibG9jayB0aGF0IGhhcyBzb21lIHNlbGVjdGVkIG9i
amVjdCBpbnNpZGUgaXQuICBHbyBhaGVhZCBhbmQgcmVjdXIuCiAgICAgICAgICAgICByZXN1bHQu
dW5pdGUoc3RhdGljX2Nhc3Q8UmVuZGVyQmxvY2sqPihjdXJyKS0+ZmlsbFNlbGVjdGlvbkdhcHMo
cm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgdHggKyBjdXJyLT54UG9zKCksIHR5ICsgY3Vyci0+
eVBvcygpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VG9wLCBsYXN0TGVmdCwgbGFzdFJpZ2h0
LCBpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFRvcCwgbGFzdExlZnQsIGxhc3RSaWdodCwg
cGFpbnRJbmZvKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUludFJlY3QgUmVu
ZGVyQmxvY2s6OmZpbGxIb3Jpem9udGFsU2VsZWN0aW9uR2FwKFJlbmRlck9iamVjdCogc2VsT2Jq
LCBpbnQgeFBvcywgaW50IHlQb3MsIGludCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBhaW50SW5mbyogaSkK
K0ludFJlY3QgUmVuZGVyQmxvY2s6OmZpbGxIb3Jpem9udGFsU2VsZWN0aW9uR2FwKFJlbmRlck9i
amVjdCogc2VsT2JqLCBpbnQgeFBvcywgaW50IHlQb3MsIGludCB3aWR0aCwgaW50IGhlaWdodCwg
Y29uc3QgUGFpbnRJbmZvKiBwYWludEluZm8pCiB7CiAgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVp
Z2h0IDw9IDApCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAgICAgSW50UmVjdCBnYXBSZWN0
KHhQb3MsIHlQb3MsIHdpZHRoLCBoZWlnaHQpOwotICAgIGlmIChpKQotICAgICAgICBpLT5wLT5m
aWxsUmVjdChnYXBSZWN0LCBzZWxPYmotPnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKKyAg
ICBpZiAocGFpbnRJbmZvKQorICAgICAgICBwYWludEluZm8tPmNvbnRleHQtPmZpbGxSZWN0KGdh
cFJlY3QsIHNlbE9iai0+c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOwogICAgIHJldHVybiBn
YXBSZWN0OwogfQogCi1JbnRSZWN0IFJlbmRlckJsb2NrOjpmaWxsVmVydGljYWxTZWxlY3Rpb25H
YXAoaW50IGxhc3RUb3AsIGludCBsYXN0TGVmdCwgaW50IGxhc3RSaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYm90dG9tWSwgUmVuZGVyQmxv
Y2sqIHJvb3RCbG9jaywgaW50IGJsb2NrWCwgaW50IGJsb2NrWSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQYWludEluZm8qIGkpCitJbnRSZWN0
IFJlbmRlckJsb2NrOjpmaWxsVmVydGljYWxTZWxlY3Rpb25HYXAoaW50IGxhc3RUb3AsIGludCBs
YXN0TGVmdCwgaW50IGxhc3RSaWdodCwgaW50IGJvdHRvbVksIFJlbmRlckJsb2NrKiByb290Qmxv
Y2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJs
b2NrWCwgaW50IGJsb2NrWSwgY29uc3QgUGFpbnRJbmZvKiBwYWludEluZm8pCiB7CiAgICAgaW50
IHRvcCA9IGJsb2NrWSArIGxhc3RUb3A7CiAgICAgaW50IGhlaWdodCA9IGJvdHRvbVkgLSB0b3A7
CiAgICAgaWYgKGhlaWdodCA8PSAwKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgICAg
ICAKKwogICAgIC8vIEdldCB0aGUgc2VsZWN0aW9uIG9mZnNldHMgZm9yIHRoZSBib3R0b20gb2Yg
dGhlIGdhcAogICAgIGludCBsZWZ0ID0gYmxvY2tYICsgbWF4KGxhc3RMZWZ0LCBsZWZ0U2VsZWN0
aW9uT2Zmc2V0KHJvb3RCbG9jaywgYm90dG9tWSkpOwogICAgIGludCByaWdodCA9IGJsb2NrWCAr
IG1pbihsYXN0UmlnaHQsIHJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgYm90dG9tWSkp
OwpAQCAtMTY4MiwxMiArMTY3OCwxMyBAQCBJbnRSZWN0IFJlbmRlckJsb2NrOjpmaWxsVmVydGlj
YWxTZWxlY3RpCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKICAgICBJbnRSZWN0IGdhcFJl
Y3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBpZiAoaSkKLSAgICAgICAgaS0+cC0+
ZmlsbFJlY3QoZ2FwUmVjdCwgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOworICAgIGlmIChw
YWludEluZm8pCisgICAgICAgIHBhaW50SW5mby0+Y29udGV4dC0+ZmlsbFJlY3QoZ2FwUmVjdCwg
c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOwogICAgIHJldHVybiBnYXBSZWN0OwogfQogCi1J
bnRSZWN0IFJlbmRlckJsb2NrOjpmaWxsTGVmdFNlbGVjdGlvbkdhcChSZW5kZXJPYmplY3QqIHNl
bE9iaiwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgaGVpZ2h0LCBSZW5kZXJCbG9jayogcm9vdEJs
b2NrLCBpbnQgYmxvY2tYLCBpbnQgYmxvY2tZLCBpbnQgdHgsIGludCB0eSwgY29uc3QgUGFpbnRJ
bmZvKiBpKQorSW50UmVjdCBSZW5kZXJCbG9jazo6ZmlsbExlZnRTZWxlY3Rpb25HYXAoUmVuZGVy
T2JqZWN0KiBzZWxPYmosIGludCB4UG9zLCBpbnQgeVBvcywgaW50IGhlaWdodCwgUmVuZGVyQmxv
Y2sqIHJvb3RCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBibG9ja1gsIGludCBibG9ja1ksIGludCB0eCwgaW50IHR5LCBjb25zdCBQYWludEluZm8q
IHBhaW50SW5mbykKIHsKICAgICBpbnQgdG9wID0geVBvcyArIHR5OwogICAgIGludCBsZWZ0ID0g
YmxvY2tYICsgbWF4KGxlZnRTZWxlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCB5UG9zKSwgbGVmdFNl
bGVjdGlvbk9mZnNldChyb290QmxvY2ssIHlQb3MgKyBoZWlnaHQpKTsKQEAgLTE2OTYsMTIgKzE2
OTMsMTMgQEAgSW50UmVjdCBSZW5kZXJCbG9jazo6ZmlsbExlZnRTZWxlY3Rpb25HYQogICAgICAg
ICByZXR1cm4gSW50UmVjdCgpOwogCiAgICAgSW50UmVjdCBnYXBSZWN0KGxlZnQsIHRvcCwgd2lk
dGgsIGhlaWdodCk7Ci0gICAgaWYgKGkpCi0gICAgICAgIGktPnAtPmZpbGxSZWN0KGdhcFJlY3Qs
IHNlbE9iai0+c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOworICAgIGlmIChwYWludEluZm8p
CisgICAgICAgIHBhaW50SW5mby0+Y29udGV4dC0+ZmlsbFJlY3QoZ2FwUmVjdCwgc2VsT2JqLT5z
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSk7CiAgICAgcmV0dXJuIGdhcFJlY3Q7CiB9CiAKLUlu
dFJlY3QgUmVuZGVyQmxvY2s6OmZpbGxSaWdodFNlbGVjdGlvbkdhcChSZW5kZXJPYmplY3QqIHNl
bE9iaiwgaW50IHhQb3MsIGludCB5UG9zLCBpbnQgaGVpZ2h0LCBSZW5kZXJCbG9jayogcm9vdEJs
b2NrLCBpbnQgYmxvY2tYLCBpbnQgYmxvY2tZLCBpbnQgdHgsIGludCB0eSwgY29uc3QgUGFpbnRJ
bmZvKiBpKQorSW50UmVjdCBSZW5kZXJCbG9jazo6ZmlsbFJpZ2h0U2VsZWN0aW9uR2FwKFJlbmRl
ck9iamVjdCogc2VsT2JqLCBpbnQgeFBvcywgaW50IHlQb3MsIGludCBoZWlnaHQsIFJlbmRlckJs
b2NrKiByb290QmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGJsb2NrWCwgaW50IGJsb2NrWSwgaW50IHR4LCBpbnQgdHksIGNvbnN0IFBhaW50SW5m
byogcGFpbnRJbmZvKQogewogICAgIGludCBsZWZ0ID0geFBvcyArIHR4OwogICAgIGludCB0b3Ag
PSB5UG9zICsgdHk7CkBAIC0xNzExLDggKzE3MDksOCBAQCBJbnRSZWN0IFJlbmRlckJsb2NrOjpm
aWxsUmlnaHRTZWxlY3Rpb25HCiAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7CiAKICAgICBJbnRS
ZWN0IGdhcFJlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBpZiAoaSkKLSAgICAg
ICAgaS0+cC0+ZmlsbFJlY3QoZ2FwUmVjdCwgc2VsT2JqLT5zZWxlY3Rpb25CYWNrZ3JvdW5kQ29s
b3IoKSk7CisgICAgaWYgKHBhaW50SW5mbykKKyAgICAgICAgcGFpbnRJbmZvLT5jb250ZXh0LT5m
aWxsUmVjdChnYXBSZWN0LCBzZWxPYmotPnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKICAg
ICByZXR1cm4gZ2FwUmVjdDsKIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZp
c2lvbiAxNzUxNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4MywxNyArMjgzLDE3IEBAIGJvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChj
b25zdCBIaXRUZXMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHBhaW50aW5nIHN0dWZmIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBSZW5kZXJCb3g6OnBhaW50KFBh
aW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSkKK3ZvaWQgUmVuZGVyQm94OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgX3R4ICs9IG1feDsKLSAg
ICBfdHkgKz0gbV95OworICAgIHR4ICs9IG1feDsKKyAgICB0eSArPSBtX3k7CiAKICAgICAvLyBk
ZWZhdWx0IGltcGxlbWVudGF0aW9uLiBKdXN0IHBhc3MgcGFpbnQgdGhyb3VnaCB0byB0aGUgY2hp
bGRyZW4KICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZC0+cGFpbnQoaSwg
X3R4LCBfdHkpOworICAgICAgICBjaGlsZC0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOwogfQog
Ci12b2lkIFJlbmRlckJveDo6cGFpbnRSb290Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBpLCBp
bnQgX3R4LCBpbnQgX3R5KQordm9pZCBSZW5kZXJCb3g6OnBhaW50Um9vdEJveERlY29yYXRpb25z
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKICAgICBjb25zdCBCYWNr
Z3JvdW5kTGF5ZXIqIGJnTGF5ZXIgPSBzdHlsZSgpLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7CiAgICAg
Q29sb3IgYmdDb2xvciA9IHN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpOwpAQCAtMzE3LDE0ICsz
MTcsMTMgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50Um9vdEJveERlY29yYXRpb25zKAogICAgIGlm
ICh2aWV3KCktPmZyYW1lVmlldygpKSB7CiAgICAgICAgIHJ3ID0gdmlldygpLT5mcmFtZVZpZXco
KS0+Y29udGVudHNXaWR0aCgpOwogICAgICAgICByaCA9IHZpZXcoKS0+ZnJhbWVWaWV3KCktPmNv
bnRlbnRzSGVpZ2h0KCk7Ci0gICAgfQotICAgIGVsc2UgeworICAgIH0gZWxzZSB7CiAgICAgICAg
IHJ3ID0gdmlldygpLT53aWR0aCgpOwogICAgICAgICByaCA9IHZpZXcoKS0+aGVpZ2h0KCk7CiAg
ICAgfQotICAgIAotICAgIGludCBieCA9IF90eCAtIG1hcmdpbkxlZnQoKTsKLSAgICBpbnQgYnkg
PSBfdHkgLSBtYXJnaW5Ub3AoKTsKKworICAgIGludCBieCA9IHR4IC0gbWFyZ2luTGVmdCgpOwor
ICAgIGludCBieSA9IHR5IC0gbWFyZ2luVG9wKCk7CiAgICAgaW50IGJ3ID0gbWF4KHcgKyBtYXJn
aW5MZWZ0KCkgKyBtYXJnaW5SaWdodCgpICsgYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSwg
cncpOwogICAgIGludCBiaCA9IG1heChoICsgbWFyZ2luVG9wKCkgKyBtYXJnaW5Cb3R0b20oKSAr
IGJvcmRlclRvcCgpICsgYm9yZGVyQm90dG9tKCksIHJoKTsKIApAQCAtMzMyLDQ5ICszMzEsNDkg
QEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50Um9vdEJveERlY29yYXRpb25zKAogICAgIC8vICIgVGhl
IGJhY2tncm91bmQgb2YgdGhlIGJveCBnZW5lcmF0ZWQgYnkgdGhlIHJvb3QgZWxlbWVudCBjb3Zl
cnMgdGhlIGVudGlyZSBjYW52YXMuIgogICAgIC8vIGhlbmNlLCBwYWludCB0aGUgYmFja2dyb3Vu
ZCBldmVuIGluIHRoZSBtYXJnaW4gYXJlYXMgKHVubGlrZSBmb3IgZXZlcnkgb3RoZXIgZWxlbWVu
dCEpCiAgICAgLy8gSSBqdXN0IGxvdmUgdGhlc2UgbGl0dGxlIGluY29uc2lzdGVuY2llcyAuLiA6
LSggKERpcmspCi0gICAgaW50IG15ID0gbWF4KGJ5LCBpLnIueSgpKTsKKyAgICBpbnQgbXkgPSBt
YXgoYnksIHBhaW50SW5mby5yZWN0LnkoKSk7CiAKLSAgICBwYWludEJhY2tncm91bmRzKGkucCwg
YmdDb2xvciwgYmdMYXllciwgbXksIGkuci5oZWlnaHQoKSwgYngsIGJ5LCBidywgYmgpOworICAg
IHBhaW50QmFja2dyb3VuZHMocGFpbnRJbmZvLmNvbnRleHQsIGJnQ29sb3IsIGJnTGF5ZXIsIG15
LCBwYWludEluZm8ucmVjdC5oZWlnaHQoKSwgYngsIGJ5LCBidywgYmgpOwogCiAgICAgaWYgKHN0
eWxlKCktPmhhc0JvcmRlcigpICYmIHN0eWxlKCktPmRpc3BsYXkoKSAhPSBJTkxJTkUpCi0gICAg
ICAgIHBhaW50Qm9yZGVyKCBpLnAsIF90eCwgX3R5LCB3LCBoLCBzdHlsZSgpICk7CisgICAgICAg
IHBhaW50Qm9yZGVyKHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHcsIGgsIHN0eWxlKCkpOwog
fQogCi12b2lkIFJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIGksIGlu
dCBfdHgsIGludCBfdHkpCit2b2lkIFJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWlu
dEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgaWYgKCFzaG91bGRQYWlu
dFdpdGhpblJvb3QoaSkpCisgICAgaWYgKCFzaG91bGRQYWludFdpdGhpblJvb3QocGFpbnRJbmZv
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzUm9vdCgpKQotICAgICAgICByZXR1cm4g
cGFpbnRSb290Qm94RGVjb3JhdGlvbnMoaSwgX3R4LCBfdHkpOwotICAgIAorICAgICAgICByZXR1
cm4gcGFpbnRSb290Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCB0eCwgdHkpOworCiAgICAgaW50
IHcgPSB3aWR0aCgpOwogICAgIGludCBoID0gaGVpZ2h0KCkgKyBib3JkZXJUb3BFeHRyYSgpICsg
Ym9yZGVyQm90dG9tRXh0cmEoKTsKLSAgICBfdHkgLT0gYm9yZGVyVG9wRXh0cmEoKTsKKyAgICB0
eSAtPSBib3JkZXJUb3BFeHRyYSgpOwogCi0gICAgaW50IG15ID0gbWF4KF90eSwgaS5yLnkoKSk7
CisgICAgaW50IG15ID0gbWF4KHR5LCBwYWludEluZm8ucmVjdC55KCkpOwogICAgIGludCBtaDsK
LSAgICBpZiAoX3R5IDwgaS5yLnkoKSkKLSAgICAgICAgbWggPSBtYXgoMCwgaCAtIChpLnIueSgp
IC0gX3R5KSk7CisgICAgaWYgKHR5IDwgcGFpbnRJbmZvLnJlY3QueSgpKQorICAgICAgICBtaCA9
IG1heCgwLCBoIC0gKHBhaW50SW5mby5yZWN0LnkoKSAtIHR5KSk7CiAgICAgZWxzZQotICAgICAg
ICBtaCA9IG1pbihpLnIuaGVpZ2h0KCksIGgpOworICAgICAgICBtaCA9IG1pbihwYWludEluZm8u
cmVjdC5oZWlnaHQoKSwgaCk7CiAKICAgICAvLyBJZiB3ZSBoYXZlIGEgbmF0aXZlIHRoZW1lIGFw
cGVhcmFuY2UsIHBhaW50IHRoYXQgYmVmb3JlIHBhaW50aW5nIG91ciBiYWNrZ3JvdW5kLiAgCiAg
ICAgLy8gVGhlIHRoZW1lIHdpbGwgdGVsbCB1cyB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgYWxz
byBwYWludCB0aGUgQ1NTIGJhY2tncm91bmQuCi0gICAgYm9vbCB0aGVtZVBhaW50ZWQgPSBzdHls
ZSgpLT5oYXNBcHBlYXJhbmNlKCkgJiYgIXRoZW1lKCktPnBhaW50KHRoaXMsIGksIEludFJlY3Qo
X3R4LCBfdHksIHcsIGgpKTsKKyAgICBib29sIHRoZW1lUGFpbnRlZCA9IHN0eWxlKCktPmhhc0Fw
cGVhcmFuY2UoKSAmJiAhdGhlbWUoKS0+cGFpbnQodGhpcywgcGFpbnRJbmZvLCBJbnRSZWN0KHR4
LCB0eSwgdywgaCkpOwogICAgIGlmICghdGhlbWVQYWludGVkKSB7CiAgICAgICAgIC8vIFRoZSA8
Ym9keT4gb25seSBwYWludHMgaXRzIGJhY2tncm91bmQgaWYgdGhlIHJvb3QgZWxlbWVudCBoYXMg
ZGVmaW5lZCBhIGJhY2tncm91bmQKICAgICAgICAgLy8gaW5kZXBlbmRlbnQgb2YgdGhlIGJvZHku
ICBHbyB0aHJvdWdoIHRoZSBET00gdG8gZ2V0IHRvIHRoZSByb290IGVsZW1lbnQncyByZW5kZXIg
b2JqZWN0LAogICAgICAgICAvLyBzaW5jZSB0aGUgcm9vdCBjb3VsZCBiZSBpbmxpbmUgYW5kIHdy
YXBwZWQgaW4gYW4gYW5vbnltb3VzIGJsb2NrLgogICAgICAgICBpZiAoIWlzQm9keSgpIHx8ICFk
b2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpIHx8IGRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVu
dCgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5oYXNCYWNrZ3JvdW5kKCkpCi0gICAgICAgICAgICBw
YWludEJhY2tncm91bmRzKGkucCwgc3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCksIHN0eWxlKCkt
PmJhY2tncm91bmRMYXllcnMoKSwgbXksIG1oLCBfdHgsIF90eSwgdywgaCk7CisgICAgICAgICAg
ICBwYWludEJhY2tncm91bmRzKHBhaW50SW5mby5jb250ZXh0LCBzdHlsZSgpLT5iYWNrZ3JvdW5k
Q29sb3IoKSwgc3R5bGUoKS0+YmFja2dyb3VuZExheWVycygpLCBteSwgbWgsIHR4LCB0eSwgdywg
aCk7CiAgICAgICAgIGlmIChzdHlsZSgpLT5oYXNBcHBlYXJhbmNlKCkpCi0gICAgICAgICAgICB0
aGVtZSgpLT5wYWludERlY29yYXRpb25zKHRoaXMsIGksIEludFJlY3QoX3R4LCBfdHksIHcsIGgp
KTsKKyAgICAgICAgICAgIHRoZW1lKCktPnBhaW50RGVjb3JhdGlvbnModGhpcywgcGFpbnRJbmZv
LCBJbnRSZWN0KHR4LCB0eSwgdywgaCkpOwogICAgIH0KLSAgICAKKwogICAgIC8vIFRoZSB0aGVt
ZSB3aWxsIHRlbGwgdXMgd2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIGFsc28gcGFpbnQgdGhlIENT
UyBib3JkZXIuCi0gICAgaWYgKCghc3R5bGUoKS0+aGFzQXBwZWFyYW5jZSgpIHx8ICghdGhlbWVQ
YWludGVkICYmIHRoZW1lKCktPnBhaW50Qm9yZGVyT25seSh0aGlzLCBpLCBJbnRSZWN0KF90eCwg
X3R5LCB3LCBoKSkpKSAmJiBzdHlsZSgpLT5oYXNCb3JkZXIoKSkKLSAgICAgICAgcGFpbnRCb3Jk
ZXIoaS5wLCBfdHgsIF90eSwgdywgaCwgc3R5bGUoKSk7CisgICAgaWYgKCghc3R5bGUoKS0+aGFz
QXBwZWFyYW5jZSgpIHx8ICghdGhlbWVQYWludGVkICYmIHRoZW1lKCktPnBhaW50Qm9yZGVyT25s
eSh0aGlzLCBwYWludEluZm8sIEludFJlY3QodHgsIHR5LCB3LCBoKSkpKSAmJiBzdHlsZSgpLT5o
YXNCb3JkZXIoKSkKKyAgICAgICAgcGFpbnRCb3JkZXIocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0
eSwgdywgaCwgc3R5bGUoKSk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjpwYWludEJhY2tncm91bmRz
KEdyYXBoaWNzQ29udGV4dCogcCwgY29uc3QgQ29sb3ImIGMsIGNvbnN0IEJhY2tncm91bmRMYXll
ciogYmdMYXllciwgaW50IGNsaXB5LCBpbnQgY2xpcGgsIGludCBfdHgsIGludCBfdHksIGludCB3
LCBpbnQgaGVpZ2h0KQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDE3NTE2KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MCw4
ICsxNTAsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgc3RhdGljWSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGljWTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Qm94
RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KTsKLSAgICB2b2lkIHBh
aW50Um9vdEJveERlY29yYXRpb25zKFBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSk7Cisg
ICAgdmlydHVhbCB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiwgaW50IHR4LCBp
bnQgdHkpOworICAgIHZvaWQgcGFpbnRSb290Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiwgaW50
IHR4LCBpbnQgdHkpOwogCiAgICAgdm9pZCBwYWludEJhY2tncm91bmRzKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IENvbG9yJiwgY29uc3QgQmFja2dyb3VuZExheWVyKiwgaW50IGNsaXB5LCBpbnQg
Y2xpcGgsIGludCBfdHgsIGludCBfdHksIGludCB3LCBpbnQgaCk7CiAgICAgdm9pZCBwYWludEJh
Y2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgQ29sb3ImLCBjb25zdCBCYWNrZ3JvdW5k
TGF5ZXIqLCBpbnQgY2xpcHksIGludCBjbGlwaCwgaW50IF90eCwgaW50IF90eSwgaW50IHcsIGlu
dCBoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAkocmV2aXNpb24gMTc1MTYp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTYsOCArMTE2LDggQEAgdm9pZCBSZW5kZXJCdXR0b246OnBhaW50T2JqZWN0KFBhaW50SW5m
bwogICAgICAgICAgICAgd2lkdGgoKSAtIGJvcmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCksIGhl
aWdodCgpIC0gYm9yZGVyQm90dG9tKCkgLSBib3JkZXJUb3AoKSk7CiAgICAgICAgIGlmIChjbGlw
UmVjdC53aWR0aCgpID09IDAgfHwgY2xpcFJlY3QuaGVpZ2h0KCkgPT0gMCkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgcGFpbnRJbmZvLnAtPnNhdmUoKTsKLSAgICAgICAgcGFpbnRJbmZv
LnAtPmNsaXAoY2xpcFJlY3QpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwor
ICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChjbGlwUmVjdCk7CiAgICAgfQogCiAgICAg
Ly8gUGFpbnQgdGhlIGNoaWxkcmVuLgpAQCAtMTI1LDcgKzEyNSw3IEBAIHZvaWQgUmVuZGVyQnV0
dG9uOjpwYWludE9iamVjdChQYWludEluZm8KIAogICAgIC8vIFBvcCB0aGUgY2xpcC4KICAgICBp
ZiAobV9pbm5lciAmJiBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpCi0g
ICAgICAgIHBhaW50SW5mby5wLT5yZXN0b3JlKCk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5yZXN0b3JlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGaWVsZHNldC5jcHAJKHJldmlzaW9uIDE3NTE2KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxNCArODIsMTQg
QEAgdm9pZCBSZW5kZXJGaWVsZHNldDo6cGFpbnRCb3hEZWNvcmF0aW9ucwogICAgIGggLT0geU9m
ZjsKICAgICB0eSArPSB5T2ZmIC0gYm9yZGVyVG9wRXh0cmEoKTsKIAotICAgIGludCBteSA9IG1h
eCh0eSwgcGFpbnRJbmZvLnIueSgpKTsKLSAgICBpbnQgZW5kID0gbWluKHBhaW50SW5mby5yLmJv
dHRvbSgpLCB0eSArIGgpOworICAgIGludCBteSA9IG1heCh0eSwgcGFpbnRJbmZvLnJlY3QueSgp
KTsKKyAgICBpbnQgZW5kID0gbWluKHBhaW50SW5mby5yZWN0LmJvdHRvbSgpLCB0eSArIGgpOwog
ICAgIGludCBtaCA9IGVuZCAtIG15OwogCi0gICAgcGFpbnRCYWNrZ3JvdW5kKHBhaW50SW5mby5w
LCBzdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKSwgc3R5bGUoKS0+YmFja2dyb3VuZExheWVycygp
LCBteSwgbWgsIHR4LCB0eSwgdywgaCk7CisgICAgcGFpbnRCYWNrZ3JvdW5kKHBhaW50SW5mby5j
b250ZXh0LCBzdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKSwgc3R5bGUoKS0+YmFja2dyb3VuZExh
eWVycygpLCBteSwgbWgsIHR4LCB0eSwgdywgaCk7CiAKICAgICBpZiAoc3R5bGUoKS0+aGFzQm9y
ZGVyKCkpCi0gICAgICAgIHBhaW50Qm9yZGVyTWludXNMZWdlbmQocGFpbnRJbmZvLnAsIHR4LCB0
eSwgdywgaCwgc3R5bGUoKSwgbGVnZW5kLT54UG9zKCksIGxlZ2VuZC0+d2lkdGgoKSk7CisgICAg
ICAgIHBhaW50Qm9yZGVyTWludXNMZWdlbmQocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgdywg
aCwgc3R5bGUoKSwgbGVnZW5kLT54UG9zKCksIGxlZ2VuZC0+d2lkdGgoKSk7CiB9CiAKIHZvaWQg
UmVuZGVyRmllbGRzZXQ6OnBhaW50Qm9yZGVyTWludXNMZWdlbmQoR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljc0NvbnRleHQsIGludCB0eCwgaW50IHR5LCBpbnQgdywgaW50IGgsCkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCShyZXZpc2lvbiAx
NzUxNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTQ3LDggKzE0Nyw4IEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENv
bnRyb2w6OnBhaW50T2JqZWMKICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpIC0gYm9y
ZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSwgaGVpZ2h0KCkgLSBib3JkZXJCb3R0b20oKSAtIGJv
cmRlclRvcCgpKTsKICAgICAgICAgaWYgKGNsaXBSZWN0LndpZHRoKCkgPT0gMCB8fCBjbGlwUmVj
dC5oZWlnaHQoKSA9PSAwKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBwYWludEluZm8u
cC0+c2F2ZSgpOwotICAgICAgICBwYWludEluZm8ucC0+Y2xpcChjbGlwUmVjdCk7CisgICAgICAg
IHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5j
bGlwKGNsaXBSZWN0KTsKICAgICB9CiAKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50
UGhhc2VGb3JlZ3JvdW5kKSB7CkBAIC0xNjcsMTEgKzE2NywxMSBAQCB2b2lkIFJlbmRlckZpbGVV
cGxvYWRDb250cm9sOjpwYWludE9iamVjCiAgICAgICAgIFJlbmRlckJ1dHRvbiogYnV0dG9uUmVu
ZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJCdXR0b24qPihtX2J1dHRvbi0+cmVuZGVyZXIoKSk7
CiAgICAgICAgIGludCB0ZXh0WSA9IGJ1dHRvblJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94
UmVjdCgpLnkoKSArIGJ1dHRvblJlbmRlcmVyLT5tYXJnaW5Ub3AoKSArIGJ1dHRvblJlbmRlcmVy
LT5ib3JkZXJUb3AoKSArIGJ1dHRvblJlbmRlcmVyLT5wYWRkaW5nVG9wKCkgKyBidXR0b25SZW5k
ZXJlci0+YmFzZWxpbmVQb3NpdGlvbih0cnVlLCBmYWxzZSk7CiAKLSAgICAgICAgcGFpbnRJbmZv
LnAtPnNldEZvbnQoc3R5bGUoKS0+Zm9udCgpKTsKLSAgICAgICAgcGFpbnRJbmZvLnAtPnNldFBl
bihzdHlsZSgpLT5jb2xvcigpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZvbnQo
c3R5bGUoKS0+Zm9udCgpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFBlbihzdHls
ZSgpLT5jb2xvcigpKTsKIAogICAgICAgICAvLyBEcmF3IHRoZSBmaWxlbmFtZQotICAgICAgICBw
YWludEluZm8ucC0+ZHJhd1RleHQodGV4dFJ1biwgSW50UG9pbnQodGV4dFgsIHRleHRZKSk7Cisg
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3VGV4dCh0ZXh0UnVuLCBJbnRQb2ludCh0ZXh0
WCwgdGV4dFkpKTsKIAogICAgICAgICBpZiAobV9maWxlQ2hvb3Nlci0+aWNvbigpKSB7CiAgICAg
ICAgICAgICAvLyBEZXRlcm1pbmUgd2hlcmUgdGhlIGljb24gc2hvdWxkIGJlIHBsYWNlZApAQCAt
MTgzLDcgKzE4Myw3IEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWMK
ICAgICAgICAgICAgICAgICBpY29uWCA9IGNvbnRlbnRMZWZ0ICsgY29udGVudFdpZHRoKCkgLSBt
X2J1dHRvbi0+cmVuZGVyZXIoKS0+d2lkdGgoKSAtIGFmdGVyQnV0dG9uU3BhY2luZyAtIGljb25X
aWR0aDsKIAogICAgICAgICAgICAgLy8gRHJhdyB0aGUgZmlsZSBpY29uCi0gICAgICAgICAgICBt
X2ZpbGVDaG9vc2VyLT5pY29uKCktPnBhaW50KHBhaW50SW5mby5wLCBJbnRSZWN0KGljb25YLCBp
Y29uWSwgaWNvbldpZHRoLCBpY29uSGVpZ2h0KSk7CisgICAgICAgICAgICBtX2ZpbGVDaG9vc2Vy
LT5pY29uKCktPnBhaW50KHBhaW50SW5mby5jb250ZXh0LCBJbnRSZWN0KGljb25YLCBpY29uWSwg
aWNvbldpZHRoLCBpY29uSGVpZ2h0KSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE5Miw3ICsx
OTIsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjCiAKICAgICAv
LyBQb3AgdGhlIGNsaXAuCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9y
ZWdyb3VuZCB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3Jv
dW5kcykKLSAgICAgICAgcGFpbnRJbmZvLnAtPnJlc3RvcmUoKTsKKyAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAogdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6
Y2FsY01pbk1heFdpZHRoKCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwCShyZXZpc2lv
biAxNzUxNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw3ICs1Myw3IEBAIFJlbmRlckZsb3cqIFJlbmRlckZsb3c6OmNvbnRpbnVhdGlv
bkJlZm8KIHsKICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09
IHRoaXMpCiAgICAgICAgIHJldHVybiB0aGlzOwotICAgIAorCiAgICAgUmVuZGVyRmxvdyogY3Vy
ciA9IGNvbnRpbnVhdGlvbigpOwogICAgIFJlbmRlckZsb3cqIG5leHRUb0xhc3QgPSB0aGlzOwog
ICAgIFJlbmRlckZsb3cqIGxhc3QgPSB0aGlzOwpAQCAtNjMsMTIgKzYzLDEyIEBAIFJlbmRlckZs
b3cqIFJlbmRlckZsb3c6OmNvbnRpbnVhdGlvbkJlZm8KICAgICAgICAgICAgICAgICByZXR1cm4g
bGFzdDsKICAgICAgICAgICAgIHJldHVybiBjdXJyOwogICAgICAgICB9Ci0gICAgICAgIAorCiAg
ICAgICAgIG5leHRUb0xhc3QgPSBsYXN0OwogICAgICAgICBsYXN0ID0gY3VycjsKICAgICAgICAg
Y3VyciA9IGN1cnItPmNvbnRpbnVhdGlvbigpOwogICAgIH0KLSAgICAKKwogICAgIGlmICghYmVm
b3JlQ2hpbGQgJiYgIWxhc3QtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuIG5leHRUb0xh
c3Q7CiAgICAgcmV0dXJuIGxhc3Q7CkBAIC04MSwxNiArODEsMTYgQEAgdm9pZCBSZW5kZXJGbG93
OjphZGRDaGlsZFdpdGhDb250aW51YXRpbwogICAgICAgICAgICAgICAgIGJlZm9yZUNoaWxkLT5w
YXJlbnQoKS0+aXNSZW5kZXJJbmxpbmUoKSk7CiAgICAgUmVuZGVyRmxvdyogYmVmb3JlQ2hpbGRQ
YXJlbnQgPSBiZWZvcmVDaGlsZCA/IHN0YXRpY19jYXN0PFJlbmRlckZsb3cqPihiZWZvcmVDaGls
ZC0+cGFyZW50KCkpIDogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxv
dy0+Y29udGludWF0aW9uKCkgPyBmbG93LT5jb250aW51YXRpb24oKSA6IGZsb3cpOwotICAgIAor
CiAgICAgaWYgKG5ld0NoaWxkLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkpCiAgICAgICAgIHJl
dHVybiBiZWZvcmVDaGlsZFBhcmVudC0+YWRkQ2hpbGRUb0Zsb3cobmV3Q2hpbGQsIGJlZm9yZUNo
aWxkKTsKLSAgICAKKwogICAgIC8vIEEgY29udGludWF0aW9uIGFsd2F5cyBjb25zaXN0cyBvZiB0
d28gcG90ZW50aWFsIGNhbmRpZGF0ZXM6IGFuIGlubGluZSBvciBhbiBhbm9ueW1vdXMKICAgICAv
LyBibG9jayBib3ggaG9sZGluZyBibG9jayBjaGlsZHJlbi4KICAgICBib29sIGNoaWxkSW5saW5l
ID0gbmV3Q2hpbGQtPmlzSW5saW5lKCk7CiAgICAgYm9vbCBiY3BJbmxpbmUgPSBiZWZvcmVDaGls
ZFBhcmVudC0+aXNJbmxpbmUoKTsKICAgICBib29sIGZsb3dJbmxpbmUgPSBmbG93LT5pc0lubGlu
ZSgpOwotICAgIAorCiAgICAgaWYgKGZsb3cgPT0gYmVmb3JlQ2hpbGRQYXJlbnQpCiAgICAgICAg
IHJldHVybiBmbG93LT5hZGRDaGlsZFRvRmxvdyhuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOwogICAg
IGVsc2UgewpAQCAtMTAwLDE5ICsxMDAsMTMgQEAgdm9pZCBSZW5kZXJGbG93OjphZGRDaGlsZFdp
dGhDb250aW51YXRpbwogICAgICAgICAgICAgcmV0dXJuIGJlZm9yZUNoaWxkUGFyZW50LT5hZGRD
aGlsZFRvRmxvdyhuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOwogICAgICAgICBlbHNlIGlmIChmbG93
SW5saW5lID09IGNoaWxkSW5saW5lKQogICAgICAgICAgICAgcmV0dXJuIGZsb3ctPmFkZENoaWxk
VG9GbG93KG5ld0NoaWxkLCAwKTsgLy8gSnVzdCB0cmVhdCBsaWtlIGFuIGFwcGVuZC4KLSAgICAg
ICAgZWxzZSAKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGJlZm9yZUNoaWxkUGFy
ZW50LT5hZGRDaGlsZFRvRmxvdyhuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOwogICAgIH0KIH0KIAot
dm9pZCBSZW5kZXJGbG93OjphZGRDaGlsZChSZW5kZXJPYmplY3QgKm5ld0NoaWxkLCBSZW5kZXJP
YmplY3QgKmJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJGbG93OjphZGRDaGlsZChSZW5kZXJPYmpl
Y3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewotI2lmZGVmIERFQlVH
X0xBWU9VVAotICAgIGtkRGVidWcoIDYwNDAgKSA8PCByZW5kZXJOYW1lKCkgPDwgIihSZW5kZXJG
bG93KTo6YWRkQ2hpbGQoICIgPDwgbmV3Q2hpbGQtPnJlbmRlck5hbWUoKSA8PAotICAgICAgICAg
ICAgICAgICAgICAgICAiLCAiIDw8IChiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5yZW5kZXJO
YW1lKCkgOiAiMCIpIDw8ICIgKSIgPDwgZW5kbDsKLSAgICBrZERlYnVnKCA2MDQwICkgPDwgImN1
cnJlbnQgaGVpZ2h0ID0gIiA8PCBtX2hlaWdodCA8PCBlbmRsOwotI2VuZGlmCi0KICAgICBpZiAo
Y29udGludWF0aW9uKCkpCiAgICAgICAgIHJldHVybiBhZGRDaGlsZFdpdGhDb250aW51YXRpb24o
bmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKICAgICByZXR1cm4gYWRkQ2hpbGRUb0Zsb3cobmV3Q2hp
bGQsIGJlZm9yZUNoaWxkKTsKQEAgLTEzNSw4ICsxMjksNyBAQCB2b2lkIFJlbmRlckZsb3c6OmF0
dGFjaExpbmVCb3goSW5saW5lRmxvCiAgICAgaWYgKG1fbGFzdExpbmVCb3gpIHsKICAgICAgICAg
bV9sYXN0TGluZUJveC0+c2V0TmV4dExpbmVCb3goYm94KTsKICAgICAgICAgYm94LT5zZXRQcmV2
aW91c0xpbmVCb3gobV9sYXN0TGluZUJveCk7Ci0gICAgfQotICAgIGVsc2UKKyAgICB9IGVsc2UK
ICAgICAgICAgbV9maXJzdExpbmVCb3ggPSBib3g7CiAgICAgSW5saW5lRmxvd0JveCogbGFzdCA9
IGJveDsKICAgICBmb3IgKElubGluZUZsb3dCb3gqIGN1cnIgPSBib3g7IGN1cnI7IGN1cnIgPSBj
dXJyLT5uZXh0Rmxvd0JveCgpKSB7CkBAIC0xNzksMTEgKzE3MiwxMSBAQCB2b2lkIFJlbmRlckZs
b3c6OmRlc3Ryb3koKQogICAgIGlmIChtX2NvbnRpbnVhdGlvbikKICAgICAgICAgbV9jb250aW51
YXRpb24tPmRlc3Ryb3koKTsKICAgICBtX2NvbnRpbnVhdGlvbiA9IDA7Ci0gICAgCisKICAgICAv
LyBNYWtlIHN1cmUgdG8gZGVzdHJveSBhbm9ueW1vdXMgY2hpbGRyZW4gZmlyc3Qgd2hpbGUgdGhl
eSBhcmUgc3RpbGwgY29ubmVjdGVkIHRvIHRoZSByZXN0IG9mIHRoZSB0cmVlLCBzbyB0aGF0IHRo
ZXkgd2lsbAogICAgIC8vIHByb3Blcmx5IGRpcnR5IGxpbmUgYm94ZXMgdGhhdCB0aGV5IGFyZSBy
ZW1vdmVkIGZyb20uICBFZmZlY3RzIHRoYXQgZG8gOmJlZm9yZS86YWZ0ZXIgb25seSBvbiBob3Zl
ciBjb3VsZCBjcmFzaCBvdGhlcndpc2UuCiAgICAgUmVuZGVyQ29udGFpbmVyOjpkZXN0cm95TGVm
dG92ZXJDaGlsZHJlbigpOwotICAgIAorCiAgICAgaWYgKCFkb2N1bWVudEJlaW5nRGVzdHJveWVk
KCkpIHsKICAgICAgICAgaWYgKG1fZmlyc3RMaW5lQm94KSB7CiAgICAgICAgICAgICAvLyBXZSBj
YW4ndCB3YWl0IGZvciBSZW5kZXJDb250YWluZXI6OmRlc3Ryb3kgdG8gY2xlYXIgdGhlIHNlbGVj
dGlvbiwKQEAgLTIwOCwxMyArMjAxLDEyIEBAIHZvaWQgUmVuZGVyRmxvdzo6ZGVzdHJveSgpCiAg
ICAgICAgICAgICAvLyBjaGlsZHJlbiB3aWxsIGJlIGRlc3Ryb3llZCBieSB0aGUgdGltZSB3ZSBy
ZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uLgogICAgICAgICAgICAgaWYgKGlzQW5vbnltb3VzQmxv
Y2soKSkgewogICAgICAgICAgICAgICAgIGZvciAoSW5saW5lRmxvd0JveCogYm94ID0gbV9maXJz
dExpbmVCb3g7IGJveDsgYm94ID0gYm94LT5uZXh0Rmxvd0JveCgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHdoaWxlIChJbmxpbmVCb3ggKmNoaWxkQm94ID0gYm94LT5maXJzdENoaWxkKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKElubGluZUJveCogY2hpbGRCb3ggPSBib3gtPmZp
cnN0Q2hpbGQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRCb3gtPnJlbW92ZSgp
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGlzSW5saW5lKCkgJiYgcGFyZW50KCkpCisg
ICAgICAgIH0gZWxzZSBpZiAoaXNJbmxpbmUoKSAmJiBwYXJlbnQoKSkKICAgICAgICAgICAgIHBh
cmVudCgpLT5kaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaGlsZCh0aGlzKTsKICAgICB9CiAKQEAgLTI0
MCwyMyArMjMyLDIxIEBAIHZvaWQgUmVuZGVyRmxvdzo6ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2gK
ICAgICBmb3IgKGN1cnIgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7IGN1cnI7IGN1cnIgPSBj
dXJyLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICBpZiAoY3Vyci0+aXNGbG9hdGluZ09y
UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAorCiAgICAgICAg
IGlmIChjdXJyLT5pc1JlcGxhY2VkKCkpIHsKICAgICAgICAgICAgIElubGluZUJveCogd3JhcHBl
ciA9IGN1cnItPmlubGluZUJveFdyYXBwZXIoKTsKICAgICAgICAgICAgIGlmICh3cmFwcGVyKQog
ICAgICAgICAgICAgICAgIGJveCA9IHdyYXBwZXItPnJvb3QoKTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlIGlmIChjdXJyLT5pc1RleHQoKSkgeworICAgICAgICB9IGVsc2UgaWYgKGN1cnItPmlz
VGV4dCgpKSB7CiAgICAgICAgICAgICBJbmxpbmVUZXh0Qm94KiB0ZXh0Qm94ID0gc3RhdGljX2Nh
c3Q8UmVuZGVyVGV4dCo+KGN1cnIpLT5sYXN0VGV4dEJveCgpOwogICAgICAgICAgICAgaWYgKHRl
eHRCb3gpCiAgICAgICAgICAgICAgICAgYm94ID0gdGV4dEJveC0+cm9vdCgpOwotICAgICAgICB9
Ci0gICAgICAgIGVsc2UgaWYgKGN1cnItPmlzSW5saW5lRmxvdygpKSB7CisgICAgICAgIH0gZWxz
ZSBpZiAoY3Vyci0+aXNJbmxpbmVGbG93KCkpIHsKICAgICAgICAgICAgIElubGluZVJ1bkJveCog
cnVuQm94ID0gc3RhdGljX2Nhc3Q8UmVuZGVyRmxvdyo+KGN1cnIpLT5sYXN0TGluZUJveCgpOwog
ICAgICAgICAgICAgaWYgKHJ1bkJveCkKICAgICAgICAgICAgICAgICBib3ggPSBydW5Cb3gtPnJv
b3QoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAoYm94KQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtMjY3LDcgKzI1Nyw3IEBAIHZvaWQgUmVuZGVyRmxvdzo6ZGly
dHlMaW5lc0Zyb21DaGFuZ2VkQ2gKICAgICBpZiAoYm94KSB7CiAgICAgICAgIFJvb3RJbmxpbmVC
b3gqIGFkamFjZW50Qm94OwogICAgICAgICBib3gtPm1hcmtEaXJ0eSgpOwotICAgICAgICAKKwog
ICAgICAgICAvLyBkaXJ0eSB0aGUgYWRqYWNlbnQgbGluZXMgdGhhdCBtaWdodCBiZSBhZmZlY3Rl
ZAogICAgICAgICAvLyBOT1RFOiB3ZSBkaXJ0eSB0aGUgcHJldmlvdXMgbGluZSBiZWNhdXNlIFJv
b3RJbmxpbmVCb3ggb2JqZWN0cyBjYWNoZQogICAgICAgICAvLyB0aGUgYWRkcmVzcyBvZiB0aGUg
Zmlyc3Qgb2JqZWN0IG9uIHRoZSBuZXh0IGxpbmUgYWZ0ZXIgYSBCUiwgd2hpY2ggd2UgbWF5IGJl
CkBAIC0zMTMsNyArMzAzLDcgQEAgdm9pZCBSZW5kZXJGbG93OjpkaXJ0eUxpbmVCb3hlcyhib29s
IGZ1bAogewogICAgIGlmICghaXNSb290TGluZUJveCAmJiBpc1JlcGxhY2VkKCkpCiAgICAgICAg
IHJldHVybiBSZW5kZXJDb250YWluZXI6OmRpcnR5TGluZUJveGVzKGZ1bGxMYXlvdXQsIGlzUm9v
dExpbmVCb3gpOwotICAgIAorCiAgICAgaWYgKGZ1bGxMYXlvdXQpCiAgICAgICAgIGRlbGV0ZUxp
bmVCb3hlcygpOwogICAgIGVsc2UgewpAQCAtMzMzLDcgKzMyMyw3IEBAIElubGluZUJveCogUmVu
ZGVyRmxvdzo6Y3JlYXRlSW5saW5lQm94KGIKICAgICAgICAgZmxvd0JveCA9IG5ldyAocmVuZGVy
QXJlbmEoKSkgSW5saW5lRmxvd0JveCh0aGlzKTsKICAgICBlbHNlCiAgICAgICAgIGZsb3dCb3gg
PSBuZXcgKHJlbmRlckFyZW5hKCkpIFJvb3RJbmxpbmVCb3godGhpcyk7Ci0gICAgCisKICAgICBp
ZiAoIW1fZmlyc3RMaW5lQm94KQogICAgICAgICBtX2ZpcnN0TGluZUJveCA9IG1fbGFzdExpbmVC
b3ggPSBmbG93Qm94OwogICAgIGVsc2UgewpAQCAtMzQ1LDEzICszMzUsMTMgQEAgSW5saW5lQm94
KiBSZW5kZXJGbG93OjpjcmVhdGVJbmxpbmVCb3goYgogICAgIHJldHVybiBmbG93Qm94OwogfQog
Ci12b2lkIFJlbmRlckZsb3c6OnBhaW50TGluZXMoUGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQg
X3R5KQordm9pZCBSZW5kZXJGbG93OjpwYWludExpbmVzKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBp
bnQgdHgsIGludCB0eSkKIHsKICAgICAvLyBPbmx5IHBhaW50IGR1cmluZyB0aGUgZm9yZWdyb3Vu
ZC9zZWxlY3Rpb24gcGhhc2VzLgotICAgIGlmIChpLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3Jv
dW5kICYmIGkucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiBpLnBoYXNlICE9IFBhaW50
UGhhc2VPdXRsaW5lIAotICAgICAgICAmJiBpLnBoYXNlICE9IFBhaW50UGhhc2VTZWxmT3V0bGlu
ZSAmJiBpLnBoYXNlICE9IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzKQorICAgIGlmIChwYWludElu
Zm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBh
aW50UGhhc2VTZWxlY3Rpb24gJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VPdXRsaW5l
IAorICAgICAgICAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lICYm
IHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lcykKICAgICAgICAgcmV0
dXJuOwotICAgIAorCiAgICAgYm9vbCBpbmxpbmVGbG93ID0gaXNJbmxpbmVGbG93KCk7CiAgICAg
aWYgKGlubGluZUZsb3cpCiAgICAgICAgIEFTU0VSVChtX2xheWVyKTsgLy8gVGhlIG9ubHkgd2F5
IGEgY29tcGFjdC9ydW4taW4vaW5saW5lIGNvdWxkIHBhaW50IGxpa2UgdGhpcyBpcyBpZiBpdCBo
YXMgYSBsYXllci4KQEAgLTM2NCwxNiArMzU0LDE2IEBAIHZvaWQgUmVuZGVyRmxvdzo6cGFpbnRM
aW5lcyhQYWludEluZm8mIGkKICAgICAvLyBpbnRlcnNlY3QuICBUaGlzIGlzIGEgcXVpY2sgc2hv
cnQtY2lyY3VpdCB0aGF0IHdlIGNhbiB0YWtlIHRvIGF2b2lkIHdhbGtpbmcgYW55IGxpbmVzLgog
ICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIGlzIGZsYXdlZCBpbiB0aGUgZm9sbG93aW5nIGV4dHJl
bWVseSBvYnNjdXJlIHdheToKICAgICAvLyBpZiBzb21lIGxpbmUgaW4gdGhlIG1pZGRsZSBoYXMg
YSBodWdlIG92ZXJmbG93LCBpdCBtaWdodCBhY3R1YWxseSBleHRlbmQgYmVsb3cgdGhlIGxhc3Qg
bGluZS4KLSAgICBpbnQgeVBvcyA9IGZpcnN0TGluZUJveCgpLT5yb290KCktPnRvcE92ZXJmbG93
KCkgLSBtYXhpbWFsT3V0bGluZVNpemUoaS5waGFzZSk7Ci0gICAgaW50IGggPSBtYXhpbWFsT3V0
bGluZVNpemUoaS5waGFzZSkgKyBsYXN0TGluZUJveCgpLT5yb290KCktPmJvdHRvbU92ZXJmbG93
KCkgLSB5UG9zOwotICAgIHlQb3MgKz0gX3R5OwotICAgIGlmICh5UG9zID49IGkuci5ib3R0b20o
KSB8fCB5UG9zICsgaCA8PSBpLnIueSgpKQorICAgIGludCB5UG9zID0gZmlyc3RMaW5lQm94KCkt
PnJvb3QoKS0+dG9wT3ZlcmZsb3coKSAtIG1heGltYWxPdXRsaW5lU2l6ZShwYWludEluZm8ucGhh
c2UpOworICAgIGludCBoID0gbWF4aW1hbE91dGxpbmVTaXplKHBhaW50SW5mby5waGFzZSkgKyBs
YXN0TGluZUJveCgpLT5yb290KCktPmJvdHRvbU92ZXJmbG93KCkgLSB5UG9zOworICAgIHlQb3Mg
Kz0gdHk7CisgICAgaWYgKHlQb3MgPj0gcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkgfHwgeVBvcyAr
IGggPD0gcGFpbnRJbmZvLnJlY3QueSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBQYWludElu
Zm8gaW5mbyhpKTsKKyAgICBQYWludEluZm8gaW5mbyhwYWludEluZm8pOwogICAgIFJlbmRlckZs
b3dTZXF1ZW5jZWRTZXQgb3V0bGluZU9iamVjdHM7CiAgICAgaW5mby5vdXRsaW5lT2JqZWN0cyA9
ICZvdXRsaW5lT2JqZWN0czsKLSAgICAKKwogICAgIC8vIFNlZSBpZiBvdXIgcm9vdCBsaW5lcyBp
bnRlcnNlY3Qgd2l0aCB0aGUgZGlydHkgcmVjdC4gIElmIHNvLCB0aGVuIHdlIHBhaW50CiAgICAg
Ly8gdGhlbS4gIE5vdGUgdGhhdCBib3hlcyBjYW4gZWFzaWx5IG92ZXJsYXAsIHNvIHdlIGNhbid0
IG1ha2UgYW55IGFzc3VtcHRpb25zCiAgICAgLy8gYmFzZWQgb2ZmIHBvc2l0aW9ucyBvZiBvdXIg
Zmlyc3QgbGluZSBib3ggb3Igb3VyIGxhc3QgbGluZSBib3guCkBAIC0zODcsMTEgKzM3NywxMSBA
QCB2b2lkIFJlbmRlckZsb3c6OnBhaW50TGluZXMoUGFpbnRJbmZvJiBpCiAgICAgICAgICAgICAv
LyBUcnkgdG8gYXZvaWQgc3BsaXR0aW5nIGEgbGluZSB2ZXJ0aWNhbGx5LCBidXQgb25seSBpZiBp
dCdzIGxlc3MgdGhhbiB0aGUgaGVpZ2h0CiAgICAgICAgICAgICAvLyBvZiB0aGUgZW50aXJlIHBh
Z2UuCiAgICAgICAgICAgICBpZiAoY3Vyci0+cm9vdCgpLT5ib3R0b21PdmVyZmxvdygpIC0gY3Vy
ci0+cm9vdCgpLT50b3BPdmVyZmxvdygpIDw9IGMtPnByaW50UmVjdCgpLmhlaWdodCgpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKF90eSArIGN1cnItPnJvb3QoKS0+Ym90dG9tT3ZlcmZsb3coKSA+
IGMtPnByaW50UmVjdCgpLmJvdHRvbSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChfdHkg
KyBjdXJyLT5yb290KCktPnRvcE92ZXJmbG93KCkgPCBjLT50cnVuY2F0ZWRBdCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgYy0+c2V0QmVzdFRydW5jYXRlZEF0KF90eSArIGN1cnItPnJvb3Qo
KS0+dG9wT3ZlcmZsb3coKSwgdGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKHR5ICsgY3Vyci0+
cm9vdCgpLT5ib3R0b21PdmVyZmxvdygpID4gYy0+cHJpbnRSZWN0KCkuYm90dG9tKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHR5ICsgY3Vyci0+cm9vdCgpLT50b3BPdmVyZmxvdygpIDwg
Yy0+dHJ1bmNhdGVkQXQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGMtPnNldEJlc3RUcnVu
Y2F0ZWRBdCh0eSArIGN1cnItPnJvb3QoKS0+dG9wT3ZlcmZsb3coKSwgdGhpcyk7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIElmIHdlIHdlcmUgYWJsZSB0byB0cnVuY2F0ZSwgZG9uJ3QgcGFpbnQu
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChfdHkgKyBjdXJyLT5yb290KCktPnRvcE92ZXJmbG93
KCkgPj0gYy0+dHJ1bmNhdGVkQXQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHR5ICsgY3Vy
ci0+cm9vdCgpLT50b3BPdmVyZmxvdygpID49IGMtPnRydW5jYXRlZEF0KCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBA
IC00MDAsMTYgKzM5MCwxNiBAQCB2b2lkIFJlbmRlckZsb3c6OnBhaW50TGluZXMoUGFpbnRJbmZv
JiBpCiAgICAgICAgIGludCB0b3AgPSBtaW4oY3Vyci0+cm9vdCgpLT50b3BPdmVyZmxvdygpLCBj
dXJyLT5yb290KCktPnNlbGVjdGlvblRvcCgpKSAtIG1heGltYWxPdXRsaW5lU2l6ZShpbmZvLnBo
YXNlKTsKICAgICAgICAgaW50IGJvdHRvbSA9IGN1cnItPnJvb3QoKS0+Ym90dG9tT3ZlcmZsb3co
KSArIG1heGltYWxPdXRsaW5lU2l6ZShpbmZvLnBoYXNlKTsKICAgICAgICAgaCA9IGJvdHRvbSAt
IHRvcDsKLSAgICAgICAgeVBvcyA9IF90eSArIHRvcDsKLSAgICAgICAgaWYgKHlQb3MgPCBpbmZv
LnIuYm90dG9tKCkgJiYgeVBvcyArIGggPiBpbmZvLnIueSgpKQotICAgICAgICAgICAgY3Vyci0+
cGFpbnQoaW5mbywgX3R4LCBfdHkpOworICAgICAgICB5UG9zID0gdHkgKyB0b3A7CisgICAgICAg
IGlmICh5UG9zIDwgaW5mby5yZWN0LmJvdHRvbSgpICYmIHlQb3MgKyBoID4gaW5mby5yZWN0Lnko
KSkKKyAgICAgICAgICAgIGN1cnItPnBhaW50KGluZm8sIHR4LCB0eSk7CiAgICAgfQogCiAgICAg
aWYgKGluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgaW5mby5waGFzZSA9PSBQYWlu
dFBoYXNlU2VsZk91dGxpbmUgfHwgaW5mby5waGFzZSA9PSBQYWludFBoYXNlQ2hpbGRPdXRsaW5l
cykgewogICAgICAgICBSZW5kZXJGbG93U2VxdWVuY2VkU2V0OjppdGVyYXRvciBlbmQgPSBpbmZv
Lm91dGxpbmVPYmplY3RzLT5lbmQoKTsKICAgICAgICAgZm9yIChSZW5kZXJGbG93U2VxdWVuY2Vk
U2V0OjppdGVyYXRvciBpdCA9IGluZm8ub3V0bGluZU9iamVjdHMtPmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkgewogICAgICAgICAgICAgUmVuZGVyRmxvdyogZmxvdyA9ICppdDsKLSAgICAgICAg
ICAgIGZsb3ctPnBhaW50T3V0bGluZShpbmZvLnAsIF90eCwgX3R5KTsKKyAgICAgICAgICAgIGZs
b3ctPnBhaW50T3V0bGluZShpbmZvLmNvbnRleHQsIHR4LCB0eSk7CiAgICAgICAgIH0KICAgICAg
ICAgaW5mby5vdXRsaW5lT2JqZWN0cy0+Y2xlYXIoKTsKICAgICB9CkBAIC00NTcsOSArNDQ3LDEw
IEBAIEludFJlY3QgUmVuZGVyRmxvdzo6Z2V0QWJzb2x1dGVSZXBhaW50UmUKICAgICAgICAgLy8g
RmluZCBvdXIgbGVmdG1vc3QgcG9zaXRpb24uCiAgICAgICAgIGludCBsZWZ0ID0gMDsKICAgICAg
ICAgaW50IHRvcCA9IGZpcnN0TGluZUJveCgpID8gZmlyc3RMaW5lQm94KCktPnlQb3MoKSA6IDA7
Ci0gICAgICAgIGZvciAoSW5saW5lUnVuQm94KiBjdXJyID0gZmlyc3RMaW5lQm94KCk7IGN1cnI7
IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKQorICAgICAgICBmb3IgKElubGluZVJ1bkJveCog
Y3VyciA9IGZpcnN0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkg
ewogICAgICAgICAgICAgaWYgKGN1cnIgPT0gZmlyc3RMaW5lQm94KCkgfHwgY3Vyci0+eFBvcygp
IDwgbGVmdCkKICAgICAgICAgICAgICAgICBsZWZ0ID0gY3Vyci0+eFBvcygpOworICAgICAgICB9
CiAKICAgICAgICAgLy8gTm93IGludmFsaWRhdGUgYSByZWN0YW5nbGUuCiAgICAgICAgIGludCBv
dyA9IHN0eWxlKCkgPyBzdHlsZSgpLT5vdXRsaW5lU2l6ZSgpIDogMDsKQEAgLTQ3NSw3ICs0NjYs
NyBAQCBJbnRSZWN0IFJlbmRlckZsb3c6OmdldEFic29sdXRlUmVwYWludFJlCiAgICAgICAgICAg
ICAgICAgaW5saW5lRmxvdy0+bGF5ZXIoKS0+cmVsYXRpdmVQb3NpdGlvbk9mZnNldChsZWZ0LCB0
b3ApOwogICAgICAgICB9CiAKLSAgICAgICAgSW50UmVjdCByKC1vdytsZWZ0LCAtb3crdG9wLCB3
aWR0aCgpK293KjIsIGhlaWdodCgpK293KjIpOworICAgICAgICBJbnRSZWN0IHIoLW93ICsgbGVm
dCwgLW93ICsgdG9wLCB3aWR0aCgpICsgb3cgKiAyLCBoZWlnaHQoKSArIG93ICogMik7CiAgICAg
ICAgIGlmIChjYi0+aGFzT3ZlcmZsb3dDbGlwKCkpIHsKICAgICAgICAgICAgIC8vIGNiLT5oZWln
aHQoKSBpcyBpbmFjY3VyYXRlIGlmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSBsYXlvdXQgb2Yg
fGNifCwgc28gdXNlIHRoZQogICAgICAgICAgICAgLy8gbGF5ZXIncyBzaXplIGluc3RlYWQuICBF
dmVuIGlmIHRoZSBsYXllcidzIHNpemUgaXMgd3JvbmcsIHRoZSBsYXllciBpdHNlbGYgd2lsbCBy
ZXBhaW50CkBAIC00ODgsNyArNDc5LDcgQEAgSW50UmVjdCBSZW5kZXJGbG93OjpnZXRBYnNvbHV0
ZVJlcGFpbnRSZQogICAgICAgICAgICAgciA9IGludGVyc2VjdGlvbihyZXBhaW50UmVjdCwgYm94
UmVjdCk7CiAgICAgICAgIH0KICAgICAgICAgY2ItPmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0
KHIpOwotICAgICAgICAKKwogICAgICAgICBpZiAob3cpIHsKICAgICAgICAgICAgIGZvciAoUmVu
ZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNp
YmxpbmcoKSkgewogICAgICAgICAgICAgICAgIGlmICghY3Vyci0+aXNUZXh0KCkpIHsKQEAgLTQ5
NiwyMiArNDg3LDIyIEBAIEludFJlY3QgUmVuZGVyRmxvdzo6Z2V0QWJzb2x1dGVSZXBhaW50UmUK
ICAgICAgICAgICAgICAgICAgICAgci51bml0ZShjaGlsZFJlY3QpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAoY29udGlu
dWF0aW9uKCkgJiYgIWNvbnRpbnVhdGlvbigpLT5pc0lubGluZSgpKSB7CiAgICAgICAgICAgICAg
ICAgSW50UmVjdCBjb250UmVjdCA9IGNvbnRpbnVhdGlvbigpLT5nZXRBYnNvbHV0ZVJlcGFpbnRS
ZWN0V2l0aE91dGxpbmUob3cpOwogICAgICAgICAgICAgICAgIHIudW5pdGUoY29udFJlY3QpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiByOwot
ICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gUmVuZGVyQ29udGFpbmVyOjpnZXRBYnNvbHV0ZVJl
cGFpbnRSZWN0KCk7CisgICAgfQorCisgICAgcmV0dXJuIFJlbmRlckNvbnRhaW5lcjo6Z2V0QWJz
b2x1dGVSZXBhaW50UmVjdCgpOwogfQogCi1pbnQKLVJlbmRlckZsb3c6Omxvd2VzdFBvc2l0aW9u
KGJvb2wgaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IsIGJvb2wgaW5jbHVkZVNlbGYpIGNvbnN0Citp
bnQgUmVuZGVyRmxvdzo6bG93ZXN0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlv
ciwgYm9vbCBpbmNsdWRlU2VsZikgY29uc3QKIHsKLSAgICBhc3NlcnQoIWlzSW5saW5lRmxvdygp
KTsKKyAgICBBU1NFUlQoIWlzSW5saW5lRmxvdygpKTsKICAgICBpbnQgYm90dG9tID0gaW5jbHVk
ZVNlbGYgJiYgbV93aWR0aCA+IDAgPyBtX2hlaWdodCA6IDA7CiAgICAgaWYgKCFpbmNsdWRlT3Zl
cmZsb3dJbnRlcmlvciAmJiBoYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgcmV0dXJuIGJvdHRv
bTsKQEAgLTUyMCwyMiArNTExLDIwIEBAIFJlbmRlckZsb3c6Omxvd2VzdFBvc2l0aW9uKGJvb2wg
aW5jbHVkZU8KICAgICAvLyBGb3Igbm93LCB3ZSBoYXZlIHRvIGRlc2NlbmQgaW50byBhbGwgdGhl
IGNoaWxkcmVuLCBzaW5jZSB3ZSBtYXkgaGF2ZSBhIGh1Z2UgYWJzIGRpdiBpbnNpZGUKICAgICAv
LyBhIHRpbnkgcmVsIGRpdiBidXJpZWQgc29tZXdoZXJlIGRlZXAgaW4gb3VyIGNoaWxkIHRyZWUu
ICBJbiB0aGlzIGNhc2Ugd2UgaGF2ZSB0byBnZXQgdG8KICAgICAvLyB0aGUgYWJzIGRpdi4KLSAg
ICBmb3IgKFJlbmRlck9iamVjdCAqYyA9IGZpcnN0Q2hpbGQoKTsgYzsgYyA9IGMtPm5leHRTaWJs
aW5nKCkpIHsKLSAgICAgICAgaWYgKCFjLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYgIWMt
PmlzVGV4dCgpICYmICFjLT5pc0lubGluZUZsb3coKSkgewotICAgICAgICAgICAgaW50IGxwID0g
Yy0+eVBvcygpICsgYy0+bG93ZXN0UG9zaXRpb24oZmFsc2UpOwotICAgICAgICAgICAgYm90dG9t
ID0gbWF4KGJvdHRvbSwgbHApOwotICAgICAgICB9CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGMg
PSBmaXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmICgh
Yy0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpICYmICFjLT5pc1RleHQoKSAmJiAhYy0+aXNJbmxp
bmVGbG93KCkpCisgICAgICAgICAgICBib3R0b20gPSBtYXgoYm90dG9tLCBjLT55UG9zKCkgKyBj
LT5sb3dlc3RQb3NpdGlvbihmYWxzZSkpOwogICAgIH0KLSAKKwogICAgIGlmIChpc1JlbFBvc2l0
aW9uZWQoKSkKICAgICAgICAgYm90dG9tICs9IHJlbGF0aXZlUG9zaXRpb25PZmZzZXRZKCk7ICAg
ICAgICAgCi0gICAgCisKICAgICByZXR1cm4gYm90dG9tOwogfQogCiBpbnQgUmVuZGVyRmxvdzo6
cmlnaHRtb3N0UG9zaXRpb24oYm9vbCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwgYm9vbCBpbmNs
dWRlU2VsZikgY29uc3QKIHsKLSAgICBhc3NlcnQoIWlzSW5saW5lRmxvdygpKTsKKyAgICBBU1NF
UlQoIWlzSW5saW5lRmxvdygpKTsKICAgICBpbnQgcmlnaHQgPSBpbmNsdWRlU2VsZiAmJiBtX2hl
aWdodCA+IDAgPyBtX3dpZHRoIDogMDsKICAgICBpZiAoIWluY2x1ZGVPdmVyZmxvd0ludGVyaW9y
ICYmIGhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICByZXR1cm4gcmlnaHQ7CkBAIC01NDQsNDQg
KzUzMyw0MCBAQCBpbnQgUmVuZGVyRmxvdzo6cmlnaHRtb3N0UG9zaXRpb24oYm9vbCBpCiAgICAg
Ly8gRm9yIG5vdywgd2UgaGF2ZSB0byBkZXNjZW5kIGludG8gYWxsIHRoZSBjaGlsZHJlbiwgc2lu
Y2Ugd2UgbWF5IGhhdmUgYSBodWdlIGFicyBkaXYgaW5zaWRlCiAgICAgLy8gYSB0aW55IHJlbCBk
aXYgYnVyaWVkIHNvbWV3aGVyZSBkZWVwIGluIG91ciBjaGlsZCB0cmVlLiAgSW4gdGhpcyBjYXNl
IHdlIGhhdmUgdG8gZ2V0IHRvCiAgICAgLy8gdGhlIGFicyBkaXYuCi0gICAgZm9yIChSZW5kZXJP
YmplY3QgKmMgPSBmaXJzdENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKSB7Ci0gICAg
ICAgIGlmICghYy0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpICYmICFjLT5pc1RleHQoKSAmJiAh
Yy0+aXNJbmxpbmVGbG93KCkpIHsKLSAgICAgICAgICAgIGludCBycCA9IGMtPnhQb3MoKSArIGMt
PnJpZ2h0bW9zdFBvc2l0aW9uKGZhbHNlKTsKLSAgICAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0
LCBycCk7Ci0gICAgICAgIH0KKyAgICBmb3IgKFJlbmRlck9iamVjdCogYyA9IGZpcnN0Q2hpbGQo
KTsgYzsgYyA9IGMtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKCFjLT5pc0Zsb2F0aW5n
T3JQb3NpdGlvbmVkKCkgJiYgIWMtPmlzVGV4dCgpICYmICFjLT5pc0lubGluZUZsb3coKSkKKyAg
ICAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCBjLT54UG9zKCkgKyBjLT5yaWdodG1vc3RQb3Np
dGlvbihmYWxzZSkpOwogICAgIH0KLSAgICAKKwogICAgIGlmIChpc1JlbFBvc2l0aW9uZWQoKSkK
ICAgICAgICAgcmlnaHQgKz0gcmVsYXRpdmVQb3NpdGlvbk9mZnNldFgoKTsKLSAgICAKKwogICAg
IHJldHVybiByaWdodDsKIH0KIAogaW50IFJlbmRlckZsb3c6OmxlZnRtb3N0UG9zaXRpb24oYm9v
bCBpbmNsdWRlT3ZlcmZsb3dJbnRlcmlvciwgYm9vbCBpbmNsdWRlU2VsZikgY29uc3QKIHsKLSAg
ICBhc3NlcnQoIWlzSW5saW5lRmxvdygpKTsKKyAgICBBU1NFUlQoIWlzSW5saW5lRmxvdygpKTsK
ICAgICBpbnQgbGVmdCA9IGluY2x1ZGVTZWxmICYmIG1faGVpZ2h0ID4gMCA/IDAgOiBtX3dpZHRo
OwogICAgIGlmICghaW5jbHVkZU92ZXJmbG93SW50ZXJpb3IgJiYgaGFzT3ZlcmZsb3dDbGlwKCkp
CiAgICAgICAgIHJldHVybiBsZWZ0OwotICAgIAorCiAgICAgLy8gRklYTUU6IENvbWUgdXAgd2l0
aCBhIHdheSB0byB1c2UgdGhlIGxheWVyIHRyZWUgdG8gYXZvaWQgdmlzaXRpbmcgYWxsIHRoZSBr
aWRzLgogICAgIC8vIEZvciBub3csIHdlIGhhdmUgdG8gZGVzY2VuZCBpbnRvIGFsbCB0aGUgY2hp
bGRyZW4sIHNpbmNlIHdlIG1heSBoYXZlIGEgaHVnZSBhYnMgZGl2IGluc2lkZQogICAgIC8vIGEg
dGlueSByZWwgZGl2IGJ1cmllZCBzb21ld2hlcmUgZGVlcCBpbiBvdXIgY2hpbGQgdHJlZS4gIElu
IHRoaXMgY2FzZSB3ZSBoYXZlIHRvIGdldCB0bwogICAgIC8vIHRoZSBhYnMgZGl2LgotICAgIGZv
ciAoUmVuZGVyT2JqZWN0ICpjID0gZmlyc3RDaGlsZCgpOyBjOyBjID0gYy0+bmV4dFNpYmxpbmco
KSkgewotICAgICAgICBpZiAoIWMtPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSAmJiAhYy0+aXNU
ZXh0KCkgJiYgIWMtPmlzSW5saW5lRmxvdygpKSB7Ci0gICAgICAgICAgICBpbnQgbHAgPSBjLT54
UG9zKCkgKyBjLT5sZWZ0bW9zdFBvc2l0aW9uKGZhbHNlKTsKLSAgICAgICAgICAgIGxlZnQgPSBt
aW4obGVmdCwgbHApOwotICAgICAgICB9CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGMgPSBmaXJz
dENoaWxkKCk7IGM7IGMgPSBjLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmICghYy0+aXNG
bG9hdGluZ09yUG9zaXRpb25lZCgpICYmICFjLT5pc1RleHQoKSAmJiAhYy0+aXNJbmxpbmVGbG93
KCkpCisgICAgICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIGMtPnhQb3MoKSArIGMtPmxlZnRtb3N0
UG9zaXRpb24oZmFsc2UpKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAoaXNSZWxQb3NpdGlvbmVk
KCkpCiAgICAgICAgIGxlZnQgKz0gcmVsYXRpdmVQb3NpdGlvbk9mZnNldFgoKTsgCi0gICAgICAg
IAorCiAgICAgcmV0dXJuIGxlZnQ7CiB9CiAKLUludFJlY3QgUmVuZGVyRmxvdzo6Y2FyZXRSZWN0
KGludCBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0eSwgaW50ICpleHRyYVdpZHRoVG9FbmRPZkxp
bmUpCitJbnRSZWN0IFJlbmRlckZsb3c6OmNhcmV0UmVjdChpbnQgb2Zmc2V0LCBFQWZmaW5pdHkg
YWZmaW5pdHksIGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQogewogICAgIC8vIERvIHRoZSBu
b3JtYWwgY2FsY3VsYXRpb24gaW4gbW9zdCBjYXNlcy4KICAgICBpZiAoZmlyc3RDaGlsZCgpIHx8
IHN0eWxlKCktPmRpc3BsYXkoKSA9PSBJTkxJTkUpCkBAIC01OTUsNyArNTgwLDcgQEAgSW50UmVj
dCBSZW5kZXJGbG93OjpjYXJldFJlY3QoaW50IG9mZnNldAogICAgIC8vIEhvd2V2ZXIsIGFzIHNv
b24gYXMgc29tZSBjb250ZW50IGlzIGVudGVyZWQsIHRoZSBsaW5lIGJveGVzIHdpbGwgYmUKICAg
ICAvLyBjb25zdHJ1Y3RlZCBhbmQgdGhpcyBrbHVkZ2UgaXMgbm90IGNhbGxlZCBhbnkgbW9yZS4g
U28gb25seSB0aGUgY2FyZXQgc2l6ZQogICAgIC8vIG9mIGFuIGVtcHR5IDpmaXJzdC1saW5lJ2Qg
YmxvY2sgaXMgd3JvbmcuIEkgdGhpbmsgd2UgY2FuIGxpdmUgd2l0aCB0aGF0LgotICAgIFJlbmRl
clN0eWxlICpjdXJyZW50U3R5bGUgPSBmaXJzdExpbmVTdHlsZSgpOworICAgIFJlbmRlclN0eWxl
KiBjdXJyZW50U3R5bGUgPSBmaXJzdExpbmVTdHlsZSgpOwogICAgIGludCBoZWlnaHQgPSBsaW5l
SGVpZ2h0KHRydWUpOwogICAgIGNvbnN0IGludCBjYXJldFdpZHRoID0gMTsKIApAQCAtNjQ3LDEw
ICs2MzIsMTAgQEAgSW50UmVjdCBSZW5kZXJGbG93OjpjYXJldFJlY3QoaW50IG9mZnNldAogICAg
ICAgICAgICAgaW50IG15UmlnaHQgPSB4ICsgY2FyZXRXaWR0aDsKICAgICAgICAgICAgIGludCBp
Z25vcmU7CiAgICAgICAgICAgICBhYnNvbHV0ZVBvc2l0aW9uRm9yQ29udGVudChteVJpZ2h0LCBp
Z25vcmUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGludCBjb250YWluZXJSaWdodCA9
IGNvbnRhaW5pbmdCbG9jaygpLT54UG9zKCkgKyBjb250YWluaW5nQmxvY2tXaWR0aCgpOwogICAg
ICAgICAgICAgYWJzb2x1dGVQb3NpdGlvbkZvckNvbnRlbnQoY29udGFpbmVyUmlnaHQsIGlnbm9y
ZSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9
IGNvbnRhaW5lclJpZ2h0IC0gbXlSaWdodDsKICAgICAgICAgfQogICAgIH0KQEAgLTY2MywyNyAr
NjQ4LDI3IEBAIEludFJlY3QgUmVuZGVyRmxvdzo6Y2FyZXRSZWN0KGludCBvZmZzZXQKICAgICBy
ZXR1cm4gSW50UmVjdCh4LCB5LCBjYXJldFdpZHRoLCBoZWlnaHQpOwogfQogCi12b2lkIFJlbmRl
ckZsb3c6OmFkZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29udGV4dCogcCwgaW50IF90eCwgaW50
IF90eSkKK3ZvaWQgUmVuZGVyRmxvdzo6YWRkRm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0
KiBncmFwaGljc0NvbnRleHQsIGludCB0eCwgaW50IHR5KQogewogICAgIGlmIChpc1JlbmRlckJs
b2NrKCkpCi0gICAgICAgcC0+YWRkRm9jdXNSaW5nUmVjdChJbnRSZWN0KF90eCwgX3R5LCB3aWR0
aCgpLCBoZWlnaHQoKSkpOworICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkRm9jdXNSaW5nUmVj
dChJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKIAogICAgIGlmICghaGFzT3Zl
cmZsb3dDbGlwKCkpIHsKICAgICAgICAgZm9yIChJbmxpbmVSdW5Cb3gqIGN1cnIgPSBmaXJzdExp
bmVCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpCi0gICAgICAgICAgICBw
LT5hZGRGb2N1c1JpbmdSZWN0KEludFJlY3QoX3R4ICsgY3Vyci0+eFBvcygpLCBfdHkgKyBjdXJy
LT55UG9zKCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKSk7Ci0gICAgICAgIAorICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRGb2N1c1JpbmdSZWN0KEludFJlY3QodHggKyBj
dXJyLT54UG9zKCksIHR5ICsgY3Vyci0+eVBvcygpLCBjdXJyLT53aWR0aCgpLCBjdXJyLT5oZWln
aHQoKSkpOworCiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyID0gZmlyc3RDaGlsZCgp
OyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgICAgIGlmICghY3Vy
ci0+aXNUZXh0KCkgJiYgIWN1cnItPmlzTGlzdE1hcmtlcigpKQotICAgICAgICAgICAgICAgIGN1
cnItPmFkZEZvY3VzUmluZ1JlY3RzKHAsIF90eCArIGN1cnItPnhQb3MoKSwgX3R5ICsgY3Vyci0+
eVBvcygpKTsKKyAgICAgICAgICAgICAgICBjdXJyLT5hZGRGb2N1c1JpbmdSZWN0cyhncmFwaGlj
c0NvbnRleHQsIHR4ICsgY3Vyci0+eFBvcygpLCB0eSArIGN1cnItPnlQb3MoKSk7CiAgICAgfQot
ICAgICAgICAKKwogICAgIGlmIChjb250aW51YXRpb24oKSkKLSAgICAgICAgY29udGludWF0aW9u
KCktPmFkZEZvY3VzUmluZ1JlY3RzKHAsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX3R4IC0gY29udGFpbmluZ0Jsb2NrKCktPnhQb3MoKSArIGNvbnRpbnVhdGlv
bigpLT54UG9zKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
dHkgLSBjb250YWluaW5nQmxvY2soKS0+eVBvcygpICsgY29udGludWF0aW9uKCktPnlQb3MoKSk7
CisgICAgICAgIGNvbnRpbnVhdGlvbigpLT5hZGRGb2N1c1JpbmdSZWN0cyhncmFwaGljc0NvbnRl
eHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHggLSBjb250
YWluaW5nQmxvY2soKS0+eFBvcygpICsgY29udGludWF0aW9uKCktPnhQb3MoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0gY29udGFpbmluZ0Jsb2NrKCkt
PnlQb3MoKSArIGNvbnRpbnVhdGlvbigpLT55UG9zKCkpOwogfQogCi12b2lkIFJlbmRlckZsb3c6
OnBhaW50T3V0bGluZShHcmFwaGljc0NvbnRleHQqIHAsIGludCBfdHgsIGludCBfdHkpCit2b2lk
IFJlbmRlckZsb3c6OnBhaW50T3V0bGluZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCwgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgaWYgKCFoYXNPdXRsaW5lKCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTY5MywyMCArNjc4LDIwIEBAIHZvaWQgUmVuZGVyRmxvdzo6cGFpbnRPdXRsaW5l
KEdyYXBoaWNzQ28KICAgICAgICAgQ29sb3Igb2MgPSBzdHlsZSgpLT5vdXRsaW5lQ29sb3IoKTsK
ICAgICAgICAgaWYgKCFvYy5pc1ZhbGlkKCkpCiAgICAgICAgICAgICBvYyA9IHN0eWxlKCktPmNv
bG9yKCk7Ci0gICAgICAgIAotICAgICAgICBwLT5pbml0Rm9jdXNSaW5nKG93LCBzdHlsZSgpLT5v
dXRsaW5lT2Zmc2V0KCkpOwotICAgICAgICBhZGRGb2N1c1JpbmdSZWN0cyhwLCBfdHgsIF90eSk7
CisKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5pbml0Rm9jdXNSaW5nKG93LCBzdHlsZSgpLT5v
dXRsaW5lT2Zmc2V0KCkpOworICAgICAgICBhZGRGb2N1c1JpbmdSZWN0cyhncmFwaGljc0NvbnRl
eHQsIHR4LCB0eSk7CiAgICAgICAgIGlmIChzdHlsZSgpLT5vdXRsaW5lU3R5bGVJc0F1dG8oKSkK
LSAgICAgICAgICAgIHAtPmRyYXdGb2N1c1Jpbmcob2MpOworICAgICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5kcmF3Rm9jdXNSaW5nKG9jKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYWRk
UERGVVJMUmVjdChwLCBwLT5mb2N1c1JpbmdCb3VuZGluZ1JlY3QoKSk7Ci0gICAgICAgIHAtPmNs
ZWFyRm9jdXNSaW5nKCk7CisgICAgICAgICAgICBhZGRQREZVUkxSZWN0KGdyYXBoaWNzQ29udGV4
dCwgZ3JhcGhpY3NDb250ZXh0LT5mb2N1c1JpbmdCb3VuZGluZ1JlY3QoKSk7CisgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+Y2xlYXJGb2N1c1JpbmcoKTsKICAgICB9CiAKICAgICBpZiAoc3R5bGUo
KS0+b3V0bGluZVN0eWxlSXNBdXRvKCkgfHwgc3R5bGUoKS0+b3V0bGluZVN0eWxlKCkgPD0gQkhJ
RERFTikKICAgICAgICAgcmV0dXJuOwogCi0gICAgRGVwcmVjYXRlZFB0ckxpc3QgPEludFJlY3Q+
IHJlY3RzOworICAgIERlcHJlY2F0ZWRQdHJMaXN0PEludFJlY3Q+IHJlY3RzOwogICAgIHJlY3Rz
LnNldEF1dG9EZWxldGUodHJ1ZSk7CiAKICAgICByZWN0cy5hcHBlbmQobmV3IEludFJlY3QpOwpA
QCAtNzE2LDI2ICs3MDEsMjcgQEAgdm9pZCBSZW5kZXJGbG93OjpwYWludE91dGxpbmUoR3JhcGhp
Y3NDbwogICAgIHJlY3RzLmFwcGVuZChuZXcgSW50UmVjdCk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMTsgaSA8IHJlY3RzLmNvdW50KCkgLSAxOyBpKyspCi0gICAgICAgIHBhaW50T3V0
bGluZUZvckxpbmUocCwgX3R4LCBfdHksICpyZWN0cy5hdChpLTEpLCAqcmVjdHMuYXQoaSksICpy
ZWN0cy5hdChpKzEpKTsKKyAgICAgICAgcGFpbnRPdXRsaW5lRm9yTGluZShncmFwaGljc0NvbnRl
eHQsIHR4LCB0eSwgKnJlY3RzLmF0KGkgLSAxKSwgKnJlY3RzLmF0KGkpLCAqcmVjdHMuYXQoaSAr
IDEpKTsKIH0KIAotdm9pZCBSZW5kZXJGbG93OjpwYWludE91dGxpbmVGb3JMaW5lKEdyYXBoaWNz
Q29udGV4dCogcCwgaW50IHR4LCBpbnQgdHksIGNvbnN0IEludFJlY3QgJmxhc3RsaW5lLCBjb25z
dCBJbnRSZWN0ICZ0aGlzbGluZSwgY29uc3QgSW50UmVjdCAmbmV4dGxpbmUpCit2b2lkIFJlbmRl
ckZsb3c6OnBhaW50T3V0bGluZUZvckxpbmUoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRl
eHQsIGludCB0eCwgaW50IHR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEludFJlY3QmIGxhc3RsaW5lLCBjb25zdCBJbnRSZWN0JiB0aGlzbGluZSwgY29uc3Qg
SW50UmVjdCYgbmV4dGxpbmUpCiB7CiAgICAgaW50IG93ID0gc3R5bGUoKS0+b3V0bGluZVdpZHRo
KCk7CiAgICAgRUJvcmRlclN0eWxlIG9zID0gc3R5bGUoKS0+b3V0bGluZVN0eWxlKCk7CiAgICAg
Q29sb3Igb2MgPSBzdHlsZSgpLT5vdXRsaW5lQ29sb3IoKTsKICAgICBpZiAoIW9jLmlzVmFsaWQo
KSkKICAgICAgICAgb2MgPSBzdHlsZSgpLT5jb2xvcigpOwotICAgIAorCiAgICAgaW50IG9mZnNl
dCA9IHN0eWxlKCktPm91dGxpbmVPZmZzZXQoKTsKLSAgICAKKwogICAgIGludCB0ID0gdHkgKyB0
aGlzbGluZS55KCkgLSBvZmZzZXQ7CiAgICAgaW50IGwgPSB0eCArIHRoaXNsaW5lLngoKSAtIG9m
ZnNldDsKICAgICBpbnQgYiA9IHR5ICsgdGhpc2xpbmUuYm90dG9tKCkgKyBvZmZzZXQ7CiAgICAg
aW50IHIgPSB0eCArIHRoaXNsaW5lLnJpZ2h0KCkgKyBvZmZzZXQ7CiAgICAgCiAgICAgLy8gbGVm
dCBlZGdlCi0gICAgZHJhd0JvcmRlcihwLAorICAgIGRyYXdCb3JkZXIoZ3JhcGhpY3NDb250ZXh0
LAogICAgICAgICAgICAgICAgbCAtIG93LAogICAgICAgICAgICAgICAgdCAtIChsYXN0bGluZS5p
c0VtcHR5KCkgfHwgdGhpc2xpbmUueCgpIDwgbGFzdGxpbmUueCgpIHx8IChsYXN0bGluZS5yaWdo
dCgpIC0gMSkgPD0gdGhpc2xpbmUueCgpID8gb3cgOiAwKSwKICAgICAgICAgICAgICAgIGwsCkBA
IC03NDYsNyArNzMyLDcgQEAgdm9pZCBSZW5kZXJGbG93OjpwYWludE91dGxpbmVGb3JMaW5lKEdy
YQogICAgICAgICAgICAgICAgKG5leHRsaW5lLmlzRW1wdHkoKSB8fCB0aGlzbGluZS54KCkgPD0g
bmV4dGxpbmUueCgpIHx8IChuZXh0bGluZS5yaWdodCgpIC0gMSkgPD0gdGhpc2xpbmUueCgpID8g
b3cgOiAtb3cpKTsKICAgICAKICAgICAvLyByaWdodCBlZGdlCi0gICAgZHJhd0JvcmRlcihwLAor
ICAgIGRyYXdCb3JkZXIoZ3JhcGhpY3NDb250ZXh0LAogICAgICAgICAgICAgICAgciwKICAgICAg
ICAgICAgICAgIHQgLSAobGFzdGxpbmUuaXNFbXB0eSgpIHx8IGxhc3RsaW5lLnJpZ2h0KCkgPCB0
aGlzbGluZS5yaWdodCgpIHx8ICh0aGlzbGluZS5yaWdodCgpIC0gMSkgPD0gbGFzdGxpbmUueCgp
ID8gb3cgOiAwKSwKICAgICAgICAgICAgICAgIHIgKyBvdywKQEAgLTc1Nyw3ICs3NDMsNyBAQCB2
b2lkIFJlbmRlckZsb3c6OnBhaW50T3V0bGluZUZvckxpbmUoR3JhCiAgICAgICAgICAgICAgICAo
bmV4dGxpbmUuaXNFbXB0eSgpIHx8IG5leHRsaW5lLnJpZ2h0KCkgPD0gdGhpc2xpbmUucmlnaHQo
KSB8fCAodGhpc2xpbmUucmlnaHQoKSAtIDEpIDw9IG5leHRsaW5lLngoKSA/IG93IDogLW93KSk7
CiAgICAgLy8gdXBwZXIgZWRnZQogICAgIGlmICh0aGlzbGluZS54KCkgPCBsYXN0bGluZS54KCkp
Ci0gICAgICAgIGRyYXdCb3JkZXIocCwKKyAgICAgICAgZHJhd0JvcmRlcihncmFwaGljc0NvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgbCAtIG93LAogICAgICAgICAgICAgICAgICAgIHQgLSBv
dywKICAgICAgICAgICAgICAgICAgICBtaW4ocitvdywgKGxhc3RsaW5lLmlzRW1wdHkoKSA/IDEw
MDAwMDAgOiB0eCArIGxhc3RsaW5lLngoKSkpLApAQCAtNzY3LDcgKzc1Myw3IEBAIHZvaWQgUmVu
ZGVyRmxvdzo6cGFpbnRPdXRsaW5lRm9yTGluZShHcmEKICAgICAgICAgICAgICAgICAgICAoIWxh
c3RsaW5lLmlzRW1wdHkoKSAmJiB0eCArIGxhc3RsaW5lLngoKSArIDEgPCByICsgb3cpID8gLW93
IDogb3cpOwogICAgIAogICAgIGlmIChsYXN0bGluZS5yaWdodCgpIDwgdGhpc2xpbmUucmlnaHQo
KSkKLSAgICAgICAgZHJhd0JvcmRlcihwLAorICAgICAgICBkcmF3Qm9yZGVyKGdyYXBoaWNzQ29u
dGV4dCwKICAgICAgICAgICAgICAgICAgICBtYXgobGFzdGxpbmUuaXNFbXB0eSgpID8gLTEwMDAw
MDAgOiB0eCArIGxhc3RsaW5lLnJpZ2h0KCksIGwgLSBvdyksCiAgICAgICAgICAgICAgICAgICAg
dCAtIG93LAogICAgICAgICAgICAgICAgICAgIHIgKyBvdywKQEAgLTc3OCw3ICs3NjQsNyBAQCB2
b2lkIFJlbmRlckZsb3c6OnBhaW50T3V0bGluZUZvckxpbmUoR3JhCiAgICAgCiAgICAgLy8gbG93
ZXIgZWRnZQogICAgIGlmICh0aGlzbGluZS54KCkgPCBuZXh0bGluZS54KCkpCi0gICAgICAgIGRy
YXdCb3JkZXIocCwKKyAgICAgICAgZHJhd0JvcmRlcihncmFwaGljc0NvbnRleHQsCiAgICAgICAg
ICAgICAgICAgICAgbCAtIG93LAogICAgICAgICAgICAgICAgICAgIGIsCiAgICAgICAgICAgICAg
ICAgICAgbWluKHIgKyBvdywgIW5leHRsaW5lLmlzRW1wdHkoKSA/IHR4ICsgbmV4dGxpbmUueCgp
ICsgMSA6IDEwMDAwMDApLApAQCAtNzg4LDcgKzc3NCw3IEBAIHZvaWQgUmVuZGVyRmxvdzo6cGFp
bnRPdXRsaW5lRm9yTGluZShHcmEKICAgICAgICAgICAgICAgICAgICAoIW5leHRsaW5lLmlzRW1w
dHkoKSAmJiB0eCArIG5leHRsaW5lLngoKSArIDEgPCByICsgb3cpID8gLW93IDogb3cpOwogICAg
IAogICAgIGlmIChuZXh0bGluZS5yaWdodCgpIDwgdGhpc2xpbmUucmlnaHQoKSkKLSAgICAgICAg
ZHJhd0JvcmRlcihwLAorICAgICAgICBkcmF3Qm9yZGVyKGdyYXBoaWNzQ29udGV4dCwKICAgICAg
ICAgICAgICAgICAgICBtYXgoIW5leHRsaW5lLmlzRW1wdHkoKSA/IHR4ICsgbmV4dGxpbmUucmln
aHQoKSA6IC0xMDAwMDAwLCBsIC0gb3cpLAogICAgICAgICAgICAgICAgICAgIGIsCiAgICAgICAg
ICAgICAgICAgICAgciArIG93LApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWln
bk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRm9yZWln
bk9iamVjdC5jcHAJKHJldmlzaW9uIDE3NTE2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Rm9yZWlnbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgQWZmaW5l
VHJhbnNmb3JtIFJlbmRlckZvcmVpZ25PYmplY3Q6OnRyYQogCiB2b2lkIFJlbmRlckZvcmVpZ25P
YmplY3Q6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVu
dFkpCiB7Ci0gICAgaWYgKHBhaW50SW5mby5wLT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYg
KHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIEtSZW5kZXJpbmdEZXZpY2UqIGRldmljZSA9IHJlbmRlcmluZ0RldmljZSgpOwpAQCAt
NTQsMzcgKzU0LDM3IEBAIHZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6cGFpbnQoUGFpbnRJbmYK
ICAgICBib29sIHNob3VsZFBvcENvbnRleHQgPSBmYWxzZTsKICAgICBpZiAoIWNvbnRleHQpIHsK
ICAgICAgICAgLy8gT25seSBuZWVkIHRvIHNldHVwIGZvciBLQ2FudmFzIHJlbmRlcmluZyBpZiBp
dCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRvbmUuCi0gICAgICAgIGNvbnRleHQgPSBwYWludEluZm8u
cC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgpOworICAgICAgICBjb250ZXh0ID0gcGFp
bnRJbmZvLmNvbnRleHQtPmNyZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRleHQoKTsKICAgICAgICAg
ZGV2aWNlLT5wdXNoQ29udGV4dChjb250ZXh0KTsKICAgICAgICAgc2hvdWxkUG9wQ29udGV4dCA9
IHRydWU7CiAgICAgfQogCi0gICAgcGFpbnRJbmZvLnAtPnNhdmUoKTsKKyAgICBwYWludEluZm8u
Y29udGV4dC0+c2F2ZSgpOwogCiAgICAgY29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRyYW5zZm9y
bSgpLnRyYW5zbGF0ZShwYXJlbnRYLCBwYXJlbnRZKSk7CiAgICAgY29udGV4dC0+Y29uY2F0Q1RN
KGxvY2FsVHJhbnNmb3JtKCkpOwogICAgIGNvbnRleHQtPmNvbmNhdENUTSh0cmFuc2xhdGlvbkZv
ckF0dHJpYnV0ZXMoKSk7CiAKLSAgICBwYWludEluZm8ucC0+Y2xpcChnZXRDbGlwUmVjdChwYXJl
bnRYLCBwYXJlbnRZKSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAoZ2V0Q2xpcFJlY3Qo
cGFyZW50WCwgcGFyZW50WSkpOwogCiAgICAgZmxvYXQgb3BhY2l0eSA9IHN0eWxlKCktPm9wYWNp
dHkoKTsKICAgICBpZiAob3BhY2l0eSA8IDEuMGYpCiAgICAgICAgIC8vIEZJWE1FOiBQb3NzaWJs
ZSBvcHRpbWl6YXRpb24gYnkgY2xpcHBpbmcgdG8gYmJveCBoZXJlLCBvbmNlIHJlbGF0aXZlQkJv
eCBpcyBpbXBsZW1lbnRlZCAmIGNsaXAsIG1hc2sgYW5kIGZpbHRlciBzdXBwb3J0IGFkZGVkLgot
ICAgICAgICBwYWludEluZm8ucC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7
CiAKICAgICBQYWludEluZm8gcGkocGFpbnRJbmZvKTsKLSAgICBwaS5yID0gYWJzb2x1dGVUcmFu
c2Zvcm0oKS5pbnZlcnQoKS5tYXBSZWN0KHBhaW50SW5mby5yKTsKKyAgICBwaS5yZWN0ID0gYWJz
b2x1dGVUcmFuc2Zvcm0oKS5pbnZlcnQoKS5tYXBSZWN0KHBhaW50SW5mby5yZWN0KTsKICAgICBS
ZW5kZXJCbG9jazo6cGFpbnQocGksIDAsIDApOwogCiAgICAgaWYgKG9wYWNpdHkgPCAxLjBmKQot
ICAgICAgICBwYWludEluZm8ucC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAKICAgICBpZiAoc2hvdWxk
UG9wQ29udGV4dCkgewogICAgICAgICBkZXZpY2UtPnBvcENvbnRleHQoKTsKICAgICAgICAgZGVs
ZXRlIGNvbnRleHQ7CiAgICAgfQogCi0gICAgcGFpbnRJbmZvLnAtPnJlc3RvcmUoKTsKKyAgICBw
YWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogfQogCiB2b2lkIFJlbmRlckZvcmVpZ25PYmpl
Y3Q6OmNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KEludFJlY3QmIHIsIGJvb2wgZikKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCShyZXZpc2lvbiAxNzUxNikKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw3ICs1Miw3IEBAIHZvaWQgUmVuZGVySFRNTENhbnZhczo6cGFpbnQoUGFpbnRJbmZvJiAK
ICAgICAgICAgcGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIHgsIHkpOwogCiAgICAgaWYg
KChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZU91dGxpbmUgfHwgcGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSkgJiYgc3R5bGUoKS0+b3V0bGluZVdpZHRoKCkgJiYg
c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCi0gICAgICAgIHBhaW50T3V0bGluZShw
YWludEluZm8ucCwgeCwgeSwgd2lkdGgoKSwgaGVpZ2h0KCksIHN0eWxlKCkpOworICAgICAgICBw
YWludE91dGxpbmUocGFpbnRJbmZvLmNvbnRleHQsIHgsIHksIHdpZHRoKCksIGhlaWdodCgpLCBz
dHlsZSgpKTsKIAogICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91
bmQgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24pCiAgICAgICAgIHJl
dHVybjsKQEAgLTY4LDExICs2OCwxMSBAQCB2b2lkIFJlbmRlckhUTUxDYW52YXM6OnBhaW50KFBh
aW50SW5mbyYgCiAgICAgfQogCiAgICAgaWYgKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmhhc1Rh
Z05hbWUoY2FudmFzVGFnKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQq
PihlbGVtZW50KCkpLT5wYWludChwYWludEluZm8ucCwKKyAgICAgICAgc3RhdGljX2Nhc3Q8SFRN
TENhbnZhc0VsZW1lbnQqPihlbGVtZW50KCkpLT5wYWludChwYWludEluZm8uY29udGV4dCwKICAg
ICAgICAgICAgIEludFJlY3QoeCArIGJvcmRlckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIHkgKyBi
b3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSwgY29udGVudFdpZHRoKCksIGNvbnRlbnRIZWlnaHQo
KSkpOwogCiAgICAgaWYgKGRyYXdTZWxlY3Rpb25UaW50KQotICAgICAgICBwYWludEluZm8ucC0+
ZmlsbFJlY3Qoc2VsZWN0aW9uUmVjdCgpLCBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSk7Cisg
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxsUmVjdChzZWxlY3Rpb25SZWN0KCksIHNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpKTsKIH0KIAogdm9pZCBSZW5kZXJIVE1MQ2FudmFzOjpsYXlv
dXQoKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gMTc1MTYpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
NSwxMCArMTg1LDEwIEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQK
ICAgICBpZiAoc2hvdWxkUGFpbnRCYWNrZ3JvdW5kT3JCb3JkZXIoKSAmJiBwYWludEluZm8ucGhh
c2UgIT0gUGFpbnRQaGFzZU91dGxpbmUgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VT
ZWxmT3V0bGluZSkgCiAgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCB0eCwg
dHkpOwogCi0gICAgR3JhcGhpY3NDb250ZXh0KiBwID0gcGFpbnRJbmZvLnA7CisgICAgR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQ7CiAKICAgICBpZiAoKHBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFp
bnRQaGFzZVNlbGZPdXRsaW5lKSAmJiBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAmJiBzdHlsZSgp
LT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKLSAgICAgICAgcGFpbnRPdXRsaW5lKHAsIHR4LCB0
eSwgd2lkdGgoKSwgaGVpZ2h0KCksIHN0eWxlKCkpOworICAgICAgICBwYWludE91dGxpbmUoY29u
dGV4dCwgdHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSwgc3R5bGUoKSk7CiAKICAgICBpZiAocGFp
bnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kICYmIHBhaW50SW5mby5waGFzZSAh
PSBQYWludFBoYXNlU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47CkBAIC0yMjAsOSArMjIwLDkg
QEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludAogCiAgICAgICAgIGlm
IChjV2lkdGggPiAyICYmIGNIZWlnaHQgPiAyKSB7CiAgICAgICAgICAgICBpZiAoIWVycm9yT2Nj
dXJyZWQoKSkgewotICAgICAgICAgICAgICAgIHAtPnNldFBlbihDb2xvcjo6bGlnaHRHcmF5KTsK
LSAgICAgICAgICAgICAgICBwLT5zZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKLSAg
ICAgICAgICAgICAgICBwLT5kcmF3UmVjdChJbnRSZWN0KHR4ICsgbGVmdEJvcmRlciArIGxlZnRQ
YWQsIHR5ICsgdG9wQm9yZGVyICsgdG9wUGFkLCBjV2lkdGgsIGNIZWlnaHQpKTsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5zZXRQZW4oQ29sb3I6OmxpZ2h0R3JheSk7CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCk7CisgICAgICAgICAg
ICAgICAgY29udGV4dC0+ZHJhd1JlY3QoSW50UmVjdCh0eCArIGxlZnRCb3JkZXIgKyBsZWZ0UGFk
LCB0eSArIHRvcEJvcmRlciArIHRvcFBhZCwgY1dpZHRoLCBjSGVpZ2h0KSk7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGJvb2wgZXJyb3JQaWN0dXJlRHJhd24gPSBmYWxzZTsKQEAgLTI0
MSwzNCArMjQxLDM0IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQK
ICAgICAgICAgICAgICAgICAgICAgY2VudGVyWSA9IDA7CiAgICAgICAgICAgICAgICAgaW1hZ2VY
ID0gbGVmdEJvcmRlciArIGxlZnRQYWQgKyBjZW50ZXJYOwogICAgICAgICAgICAgICAgIGltYWdl
WSA9IHRvcEJvcmRlciArIHRvcFBhZCArIGNlbnRlclk7Ci0gICAgICAgICAgICAgICAgcC0+ZHJh
d0ltYWdlKGltYWdlKCksIEludFBvaW50KHR4ICsgaW1hZ2VYLCB0eSArIGltYWdlWSkpOworICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZSgpLCBJbnRQb2ludCh0eCArIGlt
YWdlWCwgdHkgKyBpbWFnZVkpKTsKICAgICAgICAgICAgICAgICBlcnJvclBpY3R1cmVEcmF3biA9
IHRydWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICghbV9hbHRUZXh0LmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgdGV4dCA9IG1fYWx0VGV4
dC5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgdGV4dC5yZXBsYWNlKCdcXCcs
IGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSk7Ci0gICAgICAgICAgICAgICAgcC0+c2V0Rm9u
dChzdHlsZSgpLT5mb250KCkpOwotICAgICAgICAgICAgICAgIHAtPnNldFBlbihzdHlsZSgpLT5j
b2xvcigpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGb250KHN0eWxlKCktPmZvbnQo
KSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0UGVuKHN0eWxlKCktPmNvbG9yKCkpOwog
ICAgICAgICAgICAgICAgIGludCBheCA9IHR4ICsgbGVmdEJvcmRlciArIGxlZnRQYWQ7CiAgICAg
ICAgICAgICAgICAgaW50IGF5ID0gdHkgKyB0b3BCb3JkZXIgKyB0b3BQYWQ7CiAgICAgICAgICAg
ICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKICAgICAgICAgICAgICAg
ICBpbnQgYXNjZW50ID0gZm9udC5hc2NlbnQoKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAg
ICAgICAgICAgIC8vIE9ubHkgZHJhdyB0aGUgYWx0IHRleHQgaWYgaXQnbGwgZml0IHdpdGhpbiB0
aGUgY29udGVudCBib3gsCiAgICAgICAgICAgICAgICAgLy8gYW5kIG9ubHkgaWYgaXQgZml0cyBh
Ym92ZSB0aGUgZXJyb3IgaW1hZ2UuCiAgICAgICAgICAgICAgICAgVGV4dFJ1biB0ZXh0UnVuKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPih0ZXh0LnVuaWNvZGUoKSksIHRleHQubGVuZ3Ro
KCkpOwogICAgICAgICAgICAgICAgIGludCB0ZXh0V2lkdGggPSBmb250LndpZHRoKHRleHRSdW4p
OwogICAgICAgICAgICAgICAgIGlmIChlcnJvclBpY3R1cmVEcmF3bikgewogICAgICAgICAgICAg
ICAgICAgICBpZiAodXNhYmxlV2lkdGggPj0gdGV4dFdpZHRoICYmIGZvbnQuaGVpZ2h0KCkgPD0g
aW1hZ2VZKQotICAgICAgICAgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQodGV4dFJ1biwgSW50
UG9pbnQoYXgsIGF5ICsgYXNjZW50KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5kcmF3VGV4dCh0ZXh0UnVuLCBJbnRQb2ludChheCwgYXkgKyBhc2NlbnQpKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHVzYWJsZVdpZHRoID49IHRleHRXaWR0aCAmJiBjSGVpZ2h0ID49
IGZvbnQuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KHRleHRSdW4s
IEludFBvaW50KGF4LCBheSArIGFzY2VudCkpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5kcmF3VGV4dCh0ZXh0UnVuLCBJbnRQb2ludChheCwgYXkgKyBhc2NlbnQpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobV9jYWNoZWRJbWFnZSkgewogI2lmIFBM
QVRGT1JNKE1BQykKLSAgICAgICAgaWYgKHN0eWxlKCktPmhpZ2hsaWdodCgpICE9IG51bGxBdG9t
ICYmICFwYWludEluZm8ucC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBpZiAoc3R5bGUo
KS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0b20gJiYgIXBhaW50SW5mby5jb250ZXh0LT5wYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdodCh0eCAtIG1feCwg
dHkgLSBtX3ksIHN0eWxlKCktPmhpZ2hsaWdodCgpLCB0cnVlKTsKICNlbmRpZgogCkBAIC0yNzYs
MTAgKzI3NiwxMCBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludChQYWludEluZm8mIHBhaW50CiAK
ICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbHQgPSAoZWxlbWVudCgpICYmIGVsZW1l
bnQoKS0+aGFzVGFnTmFtZShpbWdUYWcpKSA/IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQq
PihlbGVtZW50KCkpIDogMDsKICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3Bl
cmF0b3IgPSBpbWFnZUVsdCA/IGltYWdlRWx0LT5jb21wb3NpdGVPcGVyYXRvcigpIDogQ29tcG9z
aXRlU291cmNlT3ZlcjsKLSAgICAgICAgcC0+ZHJhd0ltYWdlKGltYWdlKCksIHJlY3QsIGNvbXBv
c2l0ZU9wZXJhdG9yKTsKKyAgICAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlKCksIHJlY3Qs
IGNvbXBvc2l0ZU9wZXJhdG9yKTsKIAogICAgICAgICBpZiAoZHJhd1NlbGVjdGlvblRpbnQpCi0g
ICAgICAgICAgICBwLT5maWxsUmVjdChzZWxlY3Rpb25SZWN0KCksIHNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KHNlbGVjdGlvblJlY3Qo
KSwgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMTc1MTYpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOTksOCArMTM5OSw4IEBAIFJl
bmRlckxheWVyOjpwYWludExheWVyKFJlbmRlckxheWVyKiByb28KICAgICAgICAgc2V0Q2xpcChw
LCBwYWludERpcnR5UmVjdCwgZGFtYWdlUmVjdCk7CiAKICAgICAgICAgLy8gUGFpbnQgdGhlIGJh
Y2tncm91bmQuCi0gICAgICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIGluZm8ocCwgZGFtYWdl
UmVjdCwgUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCwgZmFsc2UsIHBhaW50aW5nUm9vdEZvclJl
bmRlcmVyLCAwKTsKLSAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQoaW5mbywgdHgsIHR5KTsKKyAg
ICAgICAgUmVuZGVyT2JqZWN0OjpQYWludEluZm8gcGFpbnRJbmZvKHAsIGRhbWFnZVJlY3QsIFBh
aW50UGhhc2VCbG9ja0JhY2tncm91bmQsIGZhbHNlLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwg
MCk7CisgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKIAogICAg
ICAgICAvLyBPdXIgc2Nyb2xsYmFyIHdpZGdldHMgcGFpbnQgZXhhY3RseSB3aGVuIHdlIHRlbGwg
dGhlbSB0bywgc28gdGhhdCB0aGV5IHdvcmsgcHJvcGVybHkgd2l0aAogICAgICAgICAvLyB6LWlu
ZGV4LiAgV2UgcGFpbnQgYWZ0ZXIgd2UgcGFpbnRlZCB0aGUgYmFja2dyb3VuZC9ib3JkZXIsIHNv
IHRoYXQgdGhlIHNjcm9sbGJhcnMgd2lsbApAQCAtMTQyNCwxOCArMTQyNCwxNyBAQCBSZW5kZXJM
YXllcjo6cGFpbnRMYXllcihSZW5kZXJMYXllciogcm9vCiAKICAgICAgICAgLy8gU2V0IHVwIHRo
ZSBjbGlwIHVzZWQgd2hlbiBwYWludGluZyBvdXIgY2hpbGRyZW4uCiAgICAgICAgIHNldENsaXAo
cCwgcGFpbnREaXJ0eVJlY3QsIGNsaXBSZWN0VG9BcHBseSk7Ci0gICAgICAgIFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvIGluZm8ocCwgY2xpcFJlY3RUb0FwcGx5LCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25Pbmx5ID8gUGFpbnRQaGFzZVNlbGVjdGlvbiA6
IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yY2VXaGl0ZVRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFpbnRpbmdSb290Rm9yUmVuZGVyZXIsIDApOwotICAgICAgICByZW5kZXJl
cigpLT5wYWludChpbmZvLCB0eCwgdHkpOworICAgICAgICBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byBwYWludEluZm8ocCwgY2xpcFJlY3RUb0FwcGx5LCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbk9ubHkgPyBQYWludFBoYXNlU2VsZWN0aW9uIDog
UGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvcmNlV2hpdGVUZXh0LCBwYWludGluZ1Jvb3RGb3JSZW5kZXJl
ciwgMCk7CisgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKICAg
ICAgICAgaWYgKCFzZWxlY3Rpb25Pbmx5KSB7Ci0gICAgICAgICAgICBpbmZvLnBoYXNlID0gUGFp
bnRQaGFzZUZsb2F0OwotICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQoaW5mbywgdHgsIHR5
KTsKLSAgICAgICAgICAgIGluZm8ucGhhc2UgPSBQYWludFBoYXNlRm9yZWdyb3VuZDsKLSAgICAg
ICAgICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8sIHR4LCB0eSk7Ci0gICAgICAgICAgICBpbmZv
LnBoYXNlID0gUGFpbnRQaGFzZUNoaWxkT3V0bGluZXM7Ci0gICAgICAgICAgICByZW5kZXJlcigp
LT5wYWludChpbmZvLCB0eCwgdHkpOworICAgICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFp
bnRQaGFzZUZsb2F0OworICAgICAgICAgICAgcmVuZGVyZXIoKS0+cGFpbnQocGFpbnRJbmZvLCB0
eCwgdHkpOworICAgICAgICAgICAgcGFpbnRJbmZvLnBoYXNlID0gUGFpbnRQaGFzZUZvcmVncm91
bmQ7CisgICAgICAgICAgICByZW5kZXJlcigpLT5wYWludChwYWludEluZm8sIHR4LCB0eSk7Cisg
ICAgICAgICAgICBwYWludEluZm8ucGhhc2UgPSBQYWludFBoYXNlQ2hpbGRPdXRsaW5lczsKKyAg
ICAgICAgICAgIHJlbmRlcmVyKCktPnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKICAgICAgICAg
fQogCiAgICAgICAgIC8vIE5vdyByZXN0b3JlIG91ciBjbGlwLgpAQCAtMTQ0NCw5ICsxNDQzLDkg
QEAgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIoUmVuZGVyTGF5ZXIqIHJvbwogICAgIAogICAgIGlm
ICghb3V0bGluZVJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIFBhaW50IG91ciBvd24gb3V0
bGluZQotICAgICAgICBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyBpbmZvKHAsIG91dGxpbmVSZWN0
LCBQYWludFBoYXNlU2VsZk91dGxpbmUsIGZhbHNlLCBwYWludGluZ1Jvb3RGb3JSZW5kZXJlciwg
MCk7CisgICAgICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIHBhaW50SW5mbyhwLCBvdXRsaW5l
UmVjdCwgUGFpbnRQaGFzZVNlbGZPdXRsaW5lLCBmYWxzZSwgcGFpbnRpbmdSb290Rm9yUmVuZGVy
ZXIsIDApOwogICAgICAgICBzZXRDbGlwKHAsIHBhaW50RGlydHlSZWN0LCBvdXRsaW5lUmVjdCk7
Ci0gICAgICAgIHJlbmRlcmVyKCktPnBhaW50KGluZm8sIHR4LCB0eSk7CisgICAgICAgIHJlbmRl
cmVyKCktPnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKICAgICAgICAgcmVzdG9yZUNsaXAocCwg
cGFpbnREaXJ0eVJlY3QsIG91dGxpbmVSZWN0KTsKICAgICB9CiAgICAgCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gMTc1MTYpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDY0ICsyMDksNjQg
QEAgSW50UmVjdCBSZW5kZXJMaXN0Qm94OjppdGVtQm91bmRpbmdCb3hSZQogICAgICAgICAgICAg
ICAgICAgIHN0eWxlKCktPmZvbnQoKS5oZWlnaHQoKSArIG9wdGlvbnNTcGFjaW5nTWlkZGxlKTsK
IH0KICAgICAKLXZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBpLCBp
bnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRPYmplY3QoUGFpbnRJbmZv
JiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQogewogICAgIC8vIFB1c2ggYSBjbGlwLgogICAg
IEludFJlY3QgY2xpcFJlY3QodHggKyBib3JkZXJMZWZ0KCksIHR5ICsgYm9yZGVyVG9wKCksCiAg
ICAgICAgICB3aWR0aCgpIC0gYm9yZGVyTGVmdCgpIC0gYm9yZGVyUmlnaHQoKSwgaGVpZ2h0KCkg
LSBib3JkZXJCb3R0b20oKSAtIGJvcmRlclRvcCgpKTsKLSAgICBpZiAoaS5waGFzZSA9PSBQYWlu
dFBoYXNlRm9yZWdyb3VuZCB8fCBpLnBoYXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dy
b3VuZHMpIHsKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5k
IHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzKSB7
CiAgICAgICAgIGlmIChjbGlwUmVjdC53aWR0aCgpID09IDAgfHwgY2xpcFJlY3QuaGVpZ2h0KCkg
PT0gMCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaS5wLT5zYXZlKCk7Ci0gICAgICAg
IGkucC0+Y2xpcChjbGlwUmVjdCk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7
CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKGNsaXBSZWN0KTsKICAgICB9CiAgICAg
CiAgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RF
bGVtZW50Kj4obm9kZSgpKTsKICAgICBpbnQgbGlzdEl0ZW1zU2l6ZSA9IHNlbGVjdC0+bGlzdEl0
ZW1zKCkuc2l6ZSgpOwogCi0gICAgaWYgKGkucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQp
IHsKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7CiAg
ICAgICAgIGludCBpbmRleCA9IG1faW5kZXhPZmZzZXQ7CiAgICAgICAgIHdoaWxlIChpbmRleCA8
IGxpc3RJdGVtc1NpemUgJiYgaW5kZXggPCBtX2luZGV4T2Zmc2V0ICsgc2l6ZSgpKSB7Ci0gICAg
ICAgICAgICBwYWludEl0ZW1Gb3JlZ3JvdW5kKGksIHR4LCB0eSwgaW5kZXgpOworICAgICAgICAg
ICAgcGFpbnRJdGVtRm9yZWdyb3VuZChwYWludEluZm8sIHR4LCB0eSwgaW5kZXgpOwogICAgICAg
ICAgICAgaW5kZXgrKzsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIC8vIFBhaW50IHRo
ZSBjaGlsZHJlbi4KLSAgICBSZW5kZXJCbG9jazo6cGFpbnRPYmplY3QoaSwgdHgsIHR5KTsKLSAg
ICAKLSAgICBpZiAoaS5waGFzZSA9PSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kKSB7CisgICAg
UmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KHBhaW50SW5mbywgdHgsIHR5KTsKKworICAgIGlmIChw
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCkgewogICAgICAgICBp
bnQgaW5kZXggPSBtX2luZGV4T2Zmc2V0OwogICAgICAgICB3aGlsZSAoaW5kZXggPCBsaXN0SXRl
bXNTaXplICYmIGluZGV4IDwgbV9pbmRleE9mZnNldCArIHNpemUoKSkgewotICAgICAgICAgICAg
cGFpbnRJdGVtQmFja2dyb3VuZChpLCB0eCwgdHksIGluZGV4KTsKKyAgICAgICAgICAgIHBhaW50
SXRlbUJhY2tncm91bmQocGFpbnRJbmZvLCB0eCwgdHksIGluZGV4KTsKICAgICAgICAgICAgIGlu
ZGV4Kys7CiAgICAgICAgIH0KLSAgICAgICAgcGFpbnRTY3JvbGxiYXIoaSk7CisgICAgICAgIHBh
aW50U2Nyb2xsYmFyKHBhaW50SW5mbyk7CiAgICAgfQogICAgIC8vIFBvcCB0aGUgY2xpcC4KLSAg
ICBpZiAoaS5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBpLnBoYXNlID09IFBhaW50
UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHMpCi0gICAgICAgIGkucC0+cmVzdG9yZSgpOworICAg
IGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgcGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZHMpCisgICAgICAgIHBhaW50
SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRT
Y3JvbGxiYXIoUGFpbnRJbmZvJiBpKQordm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludFNjcm9sbGJh
cihQYWludEluZm8mIHBhaW50SW5mbykKIHsKICAgICBpZiAobV92QmFyKSB7CiAgICAgICAgIElu
dFJlY3QgYWJzQm91bmRzID0gYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKICAgICAgICAgSW50
UmVjdCBzY3JvbGxSZWN0KGFic0JvdW5kcy5yaWdodCgpIC0gYm9yZGVyUmlnaHQoKSAtIG1fdkJh
ci0+d2lkdGgoKSwKLSAgICAgICAgICAgICAgICBhYnNCb3VuZHMueSgpICsgYm9yZGVyVG9wKCks
Ci0gICAgICAgICAgICAgICAgbV92QmFyLT53aWR0aCgpLAotICAgICAgICAgICAgICAgIGFic0Jv
dW5kcy5oZWlnaHQoKSAtIChib3JkZXJUb3AoKSArIGJvcmRlckJvdHRvbSgpKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhYnNCb3VuZHMueSgpICsgYm9yZGVyVG9wKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3ZCYXItPndpZHRoKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhYnNCb3VuZHMuaGVpZ2h0KCkgLSAoYm9yZGVyVG9wKCkgKyBib3JkZXJCb3R0b20o
KSkpOwogICAgICAgICBtX3ZCYXItPnNldFJlY3Qoc2Nyb2xsUmVjdCk7Ci0gICAgICAgIG1fdkJh
ci0+cGFpbnQoaS5wLCBzY3JvbGxSZWN0KTsKKyAgICAgICAgbV92QmFyLT5wYWludChwYWludElu
Zm8uY29udGV4dCwgc2Nyb2xsUmVjdCk7CiAgICAgfQogfQogCi12b2lkIFJlbmRlckxpc3RCb3g6
OnBhaW50SXRlbUZvcmVncm91bmQoUGFpbnRJbmZvJiBpLCBpbnQgdHgsIGludCB0eSwgaW50IGxp
c3RJbmRleCkKK3ZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRJdGVtRm9yZWdyb3VuZChQYWludElu
Zm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHksIGludCBsaXN0SW5kZXgpCiB7CiAgICAgSFRN
TFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4o
bm9kZSgpKTsKICAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgbGlzdEl0ZW1zID0gc2Vs
ZWN0LT5saXN0SXRlbXMoKTsKICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGxpc3RJdGVtc1ts
aXN0SW5kZXhdOwotICAgICAgICAgICAgCisKICAgICBTdHJpbmcgaXRlbVRleHQ7CiAgICAgaWYg
KGVsZW1lbnQtPmhhc1RhZ05hbWUob3B0aW9uVGFnKSkKICAgICAgICAgaXRlbVRleHQgPSBzdGF0
aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudCo+KGVsZW1lbnQpLT5vcHRpb25UZXh0KCk7CkBAIC0y
OTAsMTEgKzI5MCwxMCBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQo
CiAgICAgICAgIC8vIEhvbm9yIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIGZvciBkaXNhYmxlZCBpdGVt
cwogICAgICAgICBlbHNlIGlmICghZWxlbWVudC0+ZGlzYWJsZWQoKSkKICAgICAgICAgICAgIHRl
eHRDb2xvciA9IHRoZW1lKCktPmluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xv
cigpOwotICAgICAgICAgIAogICAgIH0KLSAgICAgICAgCi0gICAgaS5wLT5zZXRQZW4odGV4dENv
bG9yKTsKLSAgICAKKworICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRQZW4odGV4dENvbG9yKTsK
KwogICAgIEZvbnQgaXRlbUZvbnQgPSBzdHlsZSgpLT5mb250KCk7CiAgICAgaWYgKGVsZW1lbnQt
Pmhhc1RhZ05hbWUob3B0Z3JvdXBUYWcpKSB7CiAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBkID0g
aXRlbUZvbnQuZm9udERlc2NyaXB0aW9uKCk7CkBAIC0zMDIsMTQgKzMwMSwxNCBAQCB2b2lkIFJl
bmRlckxpc3RCb3g6OnBhaW50SXRlbUZvcmVncm91bmQoCiAgICAgICAgIGl0ZW1Gb250ID0gRm9u
dChkLCBpdGVtRm9udC5sZXR0ZXJTcGFjaW5nKCksIGl0ZW1Gb250LndvcmRTcGFjaW5nKCkpOwog
ICAgICAgICBpdGVtRm9udC51cGRhdGUoKTsKICAgICB9Ci0gICAgaS5wLT5zZXRGb250KGl0ZW1G
b250KTsKKyAgICBwYWludEluZm8uY29udGV4dC0+c2V0Rm9udChpdGVtRm9udCk7CiAgICAgCiAg
ICAgLy8gRHJhdyB0aGUgaXRlbSB0ZXh0CiAgICAgaWYgKGl0ZW1TdHlsZS0+dmlzaWJpbGl0eSgp
ICE9IEhJRERFTikKLSAgICAgICAgaS5wLT5kcmF3VGV4dCh0ZXh0UnVuLCByLmxvY2F0aW9uKCkp
OworICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd1RleHQodGV4dFJ1biwgci5sb2NhdGlv
bigpKTsKIH0KIAotdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1CYWNrZ3JvdW5kKFBhaW50
SW5mbyYgaSwgaW50IHR4LCBpbnQgdHksIGludCBsaXN0SW5kZXgpCit2b2lkIFJlbmRlckxpc3RC
b3g6OnBhaW50SXRlbUJhY2tncm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50
IHR5LCBpbnQgbGlzdEluZGV4KQogewogICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBz
dGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KG5vZGUoKSk7CiAgICAgY29uc3QgVmVjdG9y
PEhUTUxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHNlbGVjdC0+bGlzdEl0ZW1zKCk7CkBAIC0zMjYs
NyArMzI1LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludEl0ZW1CYWNrZ3JvdW5kKAogCiAg
ICAgLy8gRHJhdyB0aGUgYmFja2dyb3VuZCBmb3IgdGhpcyBsaXN0IGJveCBpdGVtCiAgICAgaWYg
KCFlbGVtZW50LT5yZW5kZXJTdHlsZSgpIHx8IGVsZW1lbnQtPnJlbmRlclN0eWxlKCktPnZpc2li
aWxpdHkoKSAhPSBISURERU4pCi0gICAgICAgIGkucC0+ZmlsbFJlY3QoaXRlbUJvdW5kaW5nQm94
UmVjdCh0eCwgdHksIGxpc3RJbmRleCksIGJhY2tDb2xvcik7CisgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT5maWxsUmVjdChpdGVtQm91bmRpbmdCb3hSZWN0KHR4LCB0eSwgbGlzdEluZGV4KSwg
YmFja0NvbG9yKTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojppc1BvaW50SW5TY3JvbGxiYXIo
SGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgX3gsIGludCBfeSwgaW50IF90eCwgaW50IF90eSkK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiAxNzUx
NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDksMzAgKzE0OSwzMCBAQCBJbmxpbmVCb3gqIFJlbmRlckxpc3RNYXJrZXI6OmNy
ZWF0ZUlubGluCiAgICAgcmV0dXJuIGJveDsKIH0KIAotdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpw
YWludChQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpCit2b2lkIFJlbmRlckxpc3RNYXJr
ZXI6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKLSAgICBp
ZiAoaS5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCkKKyAgICBpZiAocGFpbnRJbmZvLnBo
YXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
aWYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm47CiAK
ICAgICBJbnRSZWN0IG1hcmtlciA9IGdldFJlbGF0aXZlTWFya2VyUmVjdCgpOwotICAgIG1hcmtl
ci5tb3ZlKF90eCwgX3R5KTsKKyAgICBtYXJrZXIubW92ZSh0eCwgdHkpOwogCi0gICAgSW50UmVj
dCBib3goX3R4ICsgbV94LCBfdHkgKyBtX3ksIG1fd2lkdGgsIG1faGVpZ2h0KTsKKyAgICBJbnRS
ZWN0IGJveCh0eCArIG1feCwgdHkgKyBtX3ksIG1fd2lkdGgsIG1faGVpZ2h0KTsKIAotICAgIGlm
IChib3gueSgpID4gaS5yLmJvdHRvbSgpIHx8IGJveC55KCkgKyBib3guaGVpZ2h0KCkgPCBpLnIu
eSgpKQorICAgIGlmIChib3gueSgpID4gcGFpbnRJbmZvLnJlY3QuYm90dG9tKCkgfHwgYm94Lnko
KSArIGJveC5oZWlnaHQoKSA8IHBhaW50SW5mby5yZWN0LnkoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKHNob3VsZFBhaW50QmFja2dyb3VuZE9yQm9yZGVyKCkpIAotICAgICAgICBwYWlu
dEJveERlY29yYXRpb25zKGksIGJveC54KCksIGJveC55KCkpOworICAgICAgICBwYWludEJveERl
Y29yYXRpb25zKHBhaW50SW5mbywgYm94LngoKSwgYm94LnkoKSk7CiAKLSAgICBHcmFwaGljc0Nv
bnRleHQqIHAgPSBpLnA7Ci0gICAgcC0+c2V0Rm9udChzdHlsZSgpLT5mb250KCkpOworICAgIEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0OworICAgIGNvbnRleHQt
PnNldEZvbnQoc3R5bGUoKS0+Zm9udCgpKTsKIAogICAgIGlmIChkb2N1bWVudCgpLT5wcmludGlu
ZygpKSB7Ci0gICAgICAgIGlmIChib3gueSgpIDwgaS5yLnkoKSkKKyAgICAgICAgaWYgKGJveC55
KCkgPCBwYWludEluZm8ucmVjdC55KCkpCiAgICAgICAgICAgICAvLyBUaGlzIGhhcyBiZWVuIHBy
aW50ZWQgYWxyZWFkeSB3ZSBzdXBwb3NlLgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
QEAgLTE4Nyw0NCArMTg3LDQ0IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJ
bmZvJiAKIAogICAgIGlmIChtX2xpc3RJbWFnZSAmJiAhbV9saXN0SW1hZ2UtPmlzRXJyb3JJbWFn
ZSgpKSB7CiAjaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBpZiAoc3R5bGUoKS0+aGlnaGxpZ2h0
KCkgIT0gbnVsbEF0b20gJiYgIWkucC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICAgICAg
cGFpbnRDdXN0b21IaWdobGlnaHQoX3R4LCBfdHksIHN0eWxlKCktPmhpZ2hsaWdodCgpLCB0cnVl
KTsKKyAgICAgICAgaWYgKHN0eWxlKCktPmhpZ2hsaWdodCgpICE9IG51bGxBdG9tICYmICFwYWlu
dEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICAgICAgcGFpbnRDdXN0
b21IaWdobGlnaHQodHgsIHR5LCBzdHlsZSgpLT5oaWdobGlnaHQoKSwgdHJ1ZSk7CiAjZW5kaWYK
LSAgICAgICAgcC0+ZHJhd0ltYWdlKG1fbGlzdEltYWdlLT5pbWFnZSgpLCBtYXJrZXIubG9jYXRp
b24oKSk7CisgICAgICAgIGNvbnRleHQtPmRyYXdJbWFnZShtX2xpc3RJbWFnZS0+aW1hZ2UoKSwg
bWFya2VyLmxvY2F0aW9uKCkpOwogICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxl
Y3Rpb25Ob25lKQotICAgICAgICAgICAgcC0+ZmlsbFJlY3Qoc2VsZWN0aW9uUmVjdCgpLCBzZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5maWxsUmVjdChz
ZWxlY3Rpb25SZWN0KCksIHNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogI2lmZGVmIEJPWF9ERUJVRwotICAgIHAtPnNldFBlbihyZWQpOwotICAg
IHAtPmRyYXdSZWN0KGJveC54KCksIGJveC55KCksIGJveC53aWR0aCgpLCBib3guaGVpZ2h0KCkp
OworICAgIGNvbnRleHQtPnNldFBlbihyZWQpOworICAgIGNvbnRleHQtPmRyYXdSZWN0KGJveC54
KCksIGJveC55KCksIGJveC53aWR0aCgpLCBib3guaGVpZ2h0KCkpOwogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShNQUMpCiAgICAgLy8gRklYTUU6IHBhaW50IGdhcCBiZXR3ZWVuIG1hcmtlciBhbmQg
bGlzdCBpdGVtIHByb3BlcgotICAgIGlmIChzdHlsZSgpLT5oaWdobGlnaHQoKSAhPSBudWxsQXRv
bSAmJiAhaS5wLT5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHBhaW50Q3VzdG9tSGlnaGxp
Z2h0KF90eCwgX3R5LCBzdHlsZSgpLT5oaWdobGlnaHQoKSwgdHJ1ZSk7CisgICAgaWYgKHN0eWxl
KCktPmhpZ2hsaWdodCgpICE9IG51bGxBdG9tICYmICFwYWludEluZm8uY29udGV4dC0+cGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdodCh0eCwgdHksIHN0eWxl
KCktPmhpZ2hsaWdodCgpLCB0cnVlKTsKICNlbmRpZgogCiAgICAgaWYgKHNlbGVjdGlvblN0YXRl
KCkgIT0gU2VsZWN0aW9uTm9uZSkKLSAgICAgICAgcC0+ZmlsbFJlY3Qoc2VsZWN0aW9uUmVjdCgp
LCBzZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSk7CisgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0
KHNlbGVjdGlvblJlY3QoKSwgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOwogCiAgICAgY29u
c3QgQ29sb3IgY29sb3Ioc3R5bGUoKS0+Y29sb3IoKSk7Ci0gICAgcC0+c2V0UGVuKGNvbG9yKTsK
KyAgICBjb250ZXh0LT5zZXRQZW4oY29sb3IpOwogCiAgICAgc3dpdGNoKHN0eWxlKCktPmxpc3RT
dHlsZVR5cGUoKSkgewogICAgIGNhc2UgRElTQzoKLSAgICAgICAgcC0+c2V0RmlsbENvbG9yKGNv
bG9yLnJnYigpKTsKLSAgICAgICAgcC0+ZHJhd0VsbGlwc2UobWFya2VyKTsKKyAgICAgICAgY29u
dGV4dC0+c2V0RmlsbENvbG9yKGNvbG9yKTsKKyAgICAgICAgY29udGV4dC0+ZHJhd0VsbGlwc2Uo
bWFya2VyKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ0lSQ0xFOgotICAgICAgICBwLT5z
ZXRGaWxsQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKLSAgICAgICAgcC0+ZHJhd0VsbGlwc2Uo
bWFya2VyKTsKKyAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKENvbG9yOjp0cmFuc3BhcmVu
dCk7CisgICAgICAgIGNvbnRleHQtPmRyYXdFbGxpcHNlKG1hcmtlcik7CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIFNRVUFSRToKLSAgICAgICAgcC0+c2V0RmlsbENvbG9yKGNvbG9yLnJnYigp
KTsKLSAgICAgICAgcC0+ZHJhd1JlY3QobWFya2VyKTsKKyAgICAgICAgY29udGV4dC0+c2V0Rmls
bENvbG9yKGNvbG9yKTsKKyAgICAgICAgY29udGV4dC0+ZHJhd1JlY3QobWFya2VyKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgTE5PTkU6CiAgICAgICAgIHJldHVybjsKQEAgLTIzNCwxNSAr
MjM0LDE1IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICAg
ICAgICAgIFRleHRSdW4gdGV4dFJ1bihyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4obV9p
dGVtLnVuaWNvZGUoKSksIG1faXRlbS5sZW5ndGgoKSk7CiAgICAgICAgICAgICBpZiAoc3R5bGUo
KS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7CiAgICAgICAgICAgICAgICAgaW50IHdpZHRoID0gZm9u
dC53aWR0aCh0ZXh0UnVuKTsKLSAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dCh0ZXh0UnVuLCBt
YXJrZXIubG9jYXRpb24oKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RleHQodGV4
dFJ1biwgbWFya2VyLmxvY2F0aW9uKCkpOwogICAgICAgICAgICAgICAgIFVDaGFyIHBlcmlvZFNw
YWNlWzJdID0geyAnLicsICcgJyB9OwotICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KFRleHRS
dW4ocGVyaW9kU3BhY2UsIDIpLCBtYXJrZXIubG9jYXRpb24oKSArIEludFNpemUod2lkdGgsIDAp
KTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3VGV4dChUZXh0UnVuKHBlcmlvZFNwYWNl
LCAyKSwgbWFya2VyLmxvY2F0aW9uKCkgKyBJbnRTaXplKHdpZHRoLCAwKSk7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFVDaGFyIHNwYWNlUGVyaW9kWzJdID0geyAnICcs
ICcuJyB9OwogICAgICAgICAgICAgICAgIFRleHRSdW4gc3BhY2VQZXJpb2RSdW4oc3BhY2VQZXJp
b2QsIDIpOwogICAgICAgICAgICAgICAgIGludCB3aWR0aCA9IGZvbnQud2lkdGgoc3BhY2VQZXJp
b2RSdW4pOwotICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KHNwYWNlUGVyaW9kUnVuLCBtYXJr
ZXIubG9jYXRpb24oKSk7Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQodGV4dFJ1biwgbWFy
a2VyLmxvY2F0aW9uKCkgKyBJbnRTaXplKHdpZHRoLCAwKSk7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZHJhd1RleHQoc3BhY2VQZXJpb2RSdW4sIG1hcmtlci5sb2NhdGlvbigpKTsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5kcmF3VGV4dCh0ZXh0UnVuLCBtYXJrZXIubG9jYXRpb24oKSAr
IEludFNpemUod2lkdGgsIDApKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHJldmlzaW9uIDE3NTE2KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjcsMjUgKzE2NywyNSBAQCBTdHJpbmcgUmVuZGVyTWVudUxpc3Q6OnRleHQoKQogICAgIHJldHVy
biBtX2J1dHRvblRleHQgPyBtX2J1dHRvblRleHQtPmRhdGEoKSA6IFN0cmluZygpOwogfQogCi12
b2lkIFJlbmRlck1lbnVMaXN0OjpwYWludE9iamVjdChQYWludEluZm8mIGksIGludCB4LCBpbnQg
eSkKK3ZvaWQgUmVuZGVyTWVudUxpc3Q6OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBpbnQgeCwgaW50IHkpCiB7CiAgICAgLy8gUHVzaCBhIGNsaXAuCi0gICAgaWYgKGkucGhhc2Ug
PT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBh
aW50UGhhc2VGb3JlZ3JvdW5kKSB7CiAgICAgICAgIEludFJlY3QgY2xpcFJlY3QoeCArIGJvcmRl
ckxlZnQoKSArIHBhZGRpbmdMZWZ0KCksIHkgKyBib3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSwK
ICAgICAgICAgICAgIHdpZHRoKCkgLSBib3JkZXJMZWZ0KCkgLSBib3JkZXJSaWdodCgpIC0gcGFk
ZGluZ0xlZnQoKSAtIHBhZGRpbmdSaWdodCgpLAogICAgICAgICAgICAgaGVpZ2h0KCkgLSBib3Jk
ZXJCb3R0b20oKSAtIGJvcmRlclRvcCgpIC0gcGFkZGluZ1RvcCgpIC0gcGFkZGluZ0JvdHRvbSgp
KTsKICAgICAgICAgaWYgKGNsaXBSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaS5wLT5zYXZlKCk7Ci0gICAgICAgIGkucC0+Y2xpcChjbGlwUmVjdCk7CisgICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5jbGlwKGNsaXBSZWN0KTsKICAgICB9CiAKICAgICAvLyBQYWludCB0aGUgY2hpbGRyZW4uCi0g
ICAgUmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KGksIHgsIHkpOworICAgIFJlbmRlckJsb2NrOjpw
YWludE9iamVjdChwYWludEluZm8sIHgsIHkpOwogCiAgICAgLy8gUG9wIHRoZSBjbGlwLgotICAg
IGlmIChpLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQotICAgICAgICBpLnAtPnJlc3Rv
cmUoKTsKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQor
ICAgICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogfQogCiB2b2lkIFJlbmRlck1l
bnVMaXN0OjpjYWxjTWluTWF4V2lkdGgoKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxNzUxNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MzIsNyArMTczMiw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0
OjpwYWludE91dGxpbmUoR3JhcGhpY3MKIAogfQogCi12b2lkIFJlbmRlck9iamVjdDo6cGFpbnQo
UGFpbnRJbmZvJiBpLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyT2JqZWN0OjpwYWludChQ
YWludEluZm8mIC8qcGFpbnRJbmZvKi8sIGludCAvKnR4Ki8sIGludCAvKnR5Ki8pCiB7CiB9CiAK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAxNzUxNikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MjEsMjIgKzQy
MSwzMSBAQCBwdWJsaWM6CiAgICAgICogKHR4fHR5KSBpcyB0aGUgY2FsY3VsYXRlZCBwb3NpdGlv
biBvZiB0aGUgcGFyZW50CiAgICAgICovCiAgICAgc3RydWN0IFBhaW50SW5mbyB7Ci0gICAgICAg
IFBhaW50SW5mbyhHcmFwaGljc0NvbnRleHQqIF9wLCBjb25zdCBJbnRSZWN0JiBfciwgUGFpbnRQ
aGFzZSBfcGhhc2UsIGJvb2wgX2ZvcmNlV2hpdGVUZXh0LCBSZW5kZXJPYmplY3QqIF9wYWludGlu
Z1Jvb3QsIFJlbmRlckZsb3dTZXF1ZW5jZWRTZXQqIF9vdXRsaW5lT2JqZWN0cykKLSAgICAgICAg
ICAgIDogcChfcCksIHIoX3IpLCBwaGFzZShfcGhhc2UpLCBmb3JjZVdoaXRlVGV4dChfZm9yY2VX
aGl0ZVRleHQpLCBwYWludGluZ1Jvb3QoX3BhaW50aW5nUm9vdCksIG91dGxpbmVPYmplY3RzKF9v
dXRsaW5lT2JqZWN0cykge30KLSAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBwOwotICAgICAgICBJ
bnRSZWN0IHI7CisgICAgICAgIFBhaW50SW5mbyhHcmFwaGljc0NvbnRleHQqIG5ld0NvbnRleHQs
IGNvbnN0IEludFJlY3QmIG5ld1JlY3QsIFBhaW50UGhhc2UgbmV3UGhhc2UsIGJvb2wgbmV3Rm9y
Y2VXaGl0ZVRleHQsIFJlbmRlck9iamVjdCogbmV3UGFpbnRpbmdSb290LCBSZW5kZXJGbG93U2Vx
dWVuY2VkU2V0KiBuZXdPdXRsaW5lT2JqZWN0cykKKyAgICAgICAgICAgIDogY29udGV4dChuZXdD
b250ZXh0KQorICAgICAgICAgICAgLCByZWN0KG5ld1JlY3QpCisgICAgICAgICAgICAsIHBoYXNl
KG5ld1BoYXNlKQorICAgICAgICAgICAgLCBmb3JjZVdoaXRlVGV4dChuZXdGb3JjZVdoaXRlVGV4
dCkKKyAgICAgICAgICAgICwgcGFpbnRpbmdSb290KG5ld1BhaW50aW5nUm9vdCkKKyAgICAgICAg
ICAgICwgb3V0bGluZU9iamVjdHMobmV3T3V0bGluZU9iamVjdHMpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dDsKKyAgICAgICAgSW50UmVj
dCByZWN0OwogICAgICAgICBQYWludFBoYXNlIHBoYXNlOwogICAgICAgICBib29sIGZvcmNlV2hp
dGVUZXh0OwogICAgICAgICBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdDsgLy8gdXNlZCB0byBk
cmF3IGp1c3Qgb25lIGVsZW1lbnQgYW5kIGl0cyB2aXN1YWwga2lkcwogICAgICAgICBSZW5kZXJG
bG93U2VxdWVuY2VkU2V0KiBvdXRsaW5lT2JqZWN0czsgLy8gdXNlZCB0byBsaXN0IG91dGxpbmVz
IHRoYXQgc2hvdWxkIGJlIHBhaW50ZWQgYnkgYSBibG9jayB3aXRoIGlubGluZSBjaGlsZHJlbgog
ICAgIH07CisKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQg
dHkpOwogICAgIHZvaWQgcGFpbnRCb3JkZXIoR3JhcGhpY3NDb250ZXh0KiwgaW50IHR4LCBpbnQg
dHksIGludCB3LCBpbnQgaCwgY29uc3QgUmVuZGVyU3R5bGUqLCBib29sIGJlZ2luID0gdHJ1ZSwg
Ym9vbCBlbmQgPSB0cnVlKTsKICAgICBib29sIHBhaW50Qm9yZGVySW1hZ2UoR3JhcGhpY3NDb250
ZXh0KiwgaW50IHR4LCBpbnQgdHksIGludCB3LCBpbnQgaCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0
eWxlKTsKICAgICB2b2lkIHBhaW50T3V0bGluZShHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGlu
dCB0eSwgaW50IHcsIGludCBoLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpOwogCiAgICAgLy8g
UmVuZGVyQm94IGltcGxlbWVudHMgdGhpcy4KLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hEZWNv
cmF0aW9ucyhQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSkge30KKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSkgeyB9CiAKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnRCYWNrZ3JvdW5kRXh0ZW5kZWQoR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgQ29sb3ImLCBjb25zdCBCYWNrZ3JvdW5kTGF5ZXIqLCBpbnQgY2xpcHksIGludCBjbGlw
aCwKICAgICAgICAgaW50IHR4LCBpbnQgdHksIGludCB3LCBpbnQgaGVpZ2h0LCBpbnQgYmxlZnQs
IGludCBicmlnaHQsIGludCBwbGVmdCwgaW50IHByaWdodCkge30KQEAgLTg2MSwxOCArODcwLDE5
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25TdGFydEVuZChpbnQmIHNw
b3MsIGludCYgZXBvcyk7CiAKLSAgICBSZW5kZXJPYmplY3QqIHBhaW50aW5nUm9vdEZvckNoaWxk
cmVuKFBhaW50SW5mbyAmaSkgY29uc3QgeworICAgIFJlbmRlck9iamVjdCogcGFpbnRpbmdSb290
Rm9yQ2hpbGRyZW4oUGFpbnRJbmZvJiBwYWludEluZm8pIGNvbnN0CisgICAgewogICAgICAgICAv
LyBpZiB3ZSdyZSB0aGUgcGFpbnRpbmcgcm9vdCwga2lkcyBkcmF3IG5vcm1hbGx5LCBhbmQgc2Vl
IHJvb3Qgb2YgMAotICAgICAgICByZXR1cm4gKCFpLnBhaW50aW5nUm9vdCB8fCBpLnBhaW50aW5n
Um9vdCA9PSB0aGlzKSA/IDAgOiBpLnBhaW50aW5nUm9vdDsKKyAgICAgICAgcmV0dXJuICghcGFp
bnRJbmZvLnBhaW50aW5nUm9vdCB8fCBwYWludEluZm8ucGFpbnRpbmdSb290ID09IHRoaXMpID8g
MCA6IHBhaW50SW5mby5wYWludGluZ1Jvb3Q7CiAgICAgfQogCi0gICAgYm9vbCBzaG91bGRQYWlu
dFdpdGhpblJvb3QoUGFpbnRJbmZvICZpKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAhaS5wYWlu
dGluZ1Jvb3QgfHwgaS5wYWludGluZ1Jvb3QgPT0gdGhpczsKKyAgICBib29sIHNob3VsZFBhaW50
V2l0aGluUm9vdChQYWludEluZm8mIHBhaW50SW5mbykgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhcGFpbnRJbmZvLnBhaW50aW5nUm9vdCB8fCBwYWludEluZm8ucGFpbnRpbmdSb290ID09
IHRoaXM7CiAgICAgfQotICAgIAorCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIHByaW50
Qm94RGVjb3JhdGlvbnMoR3JhcGhpY3NDb250ZXh0KiwgaW50IC8qeCovLCBpbnQgLyp5Ki8sCi0g
ICAgICAgIGludCAvKncqLywgaW50IC8qaCovLCBpbnQgLyp0eCovLCBpbnQgLyp0eSovKSB7fQor
ICAgIHZpcnR1YWwgdm9pZCBwcmludEJveERlY29yYXRpb25zKEdyYXBoaWNzQ29udGV4dCosIGlu
dCAvKngqLywgaW50IC8qeSovLCBpbnQgLyp3Ki8sIGludCAvKmgqLywgaW50IC8qdHgqLywgaW50
IC8qdHkqLykgeyB9CiAKICAgICB2aXJ0dWFsIEludFJlY3Qgdmlld1JlY3QoKSBjb25zdDsKIApJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAJKHJldmlzaW9uIDE3NTE2KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MywyMyArMTYz
LDIzIEBAIHNob3J0IFJlbmRlclBhdGg6OmJhc2VsaW5lUG9zaXRpb24oYm9vbCAKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KHJlbGF0aXZlQkJveCh0cnVlKS5oZWlnaHQoKSk7CiB9CiAK
LXZvaWQgUmVuZGVyUGF0aDo6cGFpbnQoUGFpbnRJbmZvICZwYWludEluZm8sIGludCBwYXJlbnRY
LCBpbnQgcGFyZW50WSkKK3ZvaWQgUmVuZGVyUGF0aDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSkKIHsKICAgICAvLyBObyBvbmUgc2hvdWxkIGJl
IHRyYW5zZm9ybWluZyB1cyB2aWEgdGhlc2UuCiAgICAgLy9BU1NFUlQocGFyZW50WCA9PSAwKTsK
ICAgICAvL0FTU0VSVChwYXJlbnRZID09IDApOwogCi0gICAgaWYgKHBhaW50SW5mby5wLT5wYWlu
dGluZ0Rpc2FibGVkKCkgfHwgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3Vu
ZCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCBwYXRoKCkuaXNFbXB0eSgp
KQorICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IChwYWlu
dEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHx8IHN0eWxlKCktPnZpc2liaWxp
dHkoKSA9PSBISURERU4gfHwgcGF0aCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIEtSZW5kZXJpbmdEZXZpY2UqIGRldmljZSA9IHJlbmRlcmluZ0RldmljZSgpOwogICAg
IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBjb250ZXh0ID0gZGV2aWNlLT5jdXJyZW50Q29udGV4
dCgpOwogICAgIGJvb2wgc2hvdWxkUG9wQ29udGV4dCA9IGZhbHNlOwogICAgIGlmIChjb250ZXh0
KQotICAgICAgICBwYWludEluZm8ucC0+c2F2ZSgpOworICAgICAgICBwYWludEluZm8uY29udGV4
dC0+c2F2ZSgpOwogICAgIGVsc2UgewogICAgICAgICAvLyBOZWVkIHRvIHNldCB1cCBLQ2FudmFz
IHJlbmRlcmluZyBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRvbmUuCi0gICAgICAgIGNvbnRl
eHQgPSBwYWludEluZm8ucC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgpOworICAgICAg
ICBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPmNyZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRl
eHQoKTsKICAgICAgICAgZGV2aWNlLT5wdXNoQ29udGV4dChjb250ZXh0KTsKICAgICAgICAgc2hv
dWxkUG9wQ29udGV4dCA9IHRydWU7CiAgICAgfQpAQCAtMjAxLDIwICsyMDEsMjAgQEAgdm9pZCBS
ZW5kZXJQYXRoOjpwYWludChQYWludEluZm8gJnBhaW50SQogCiAgICAgY29udGV4dC0+Y2xlYXJQ
YXRoKCk7CiAgICAgCi0gICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpmaWxsUGFpbnRTZXJ2ZXIg
PSBLU1ZHUGFpbnRlckZhY3Rvcnk6OmZpbGxQYWludFNlcnZlcihzdHlsZSgpLCB0aGlzKTsKKyAg
ICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIqIGZpbGxQYWludFNlcnZlciA9IEtTVkdQYWludGVyRmFj
dG9yeTo6ZmlsbFBhaW50U2VydmVyKHN0eWxlKCksIHRoaXMpOwogICAgIGlmIChmaWxsUGFpbnRT
ZXJ2ZXIpIHsKICAgICAgICAgY29udGV4dC0+YWRkUGF0aChwYXRoKCkpOwogICAgICAgICBmaWxs
UGFpbnRTZXJ2ZXItPnNldEFjdGl2ZUNsaWVudCh0aGlzKTsKICAgICAgICAgZmlsbFBhaW50U2Vy
dmVyLT5kcmF3KGNvbnRleHQsIHRoaXMsIEFQUExZX1RPX0ZJTEwpOwogICAgIH0KLSAgICBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXIgKnN0cm9rZVBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5
OjpzdHJva2VQYWludFNlcnZlcihzdHlsZSgpLCB0aGlzKTsKKyAgICBLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXIqIHN0cm9rZVBhaW50U2VydmVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWlu
dFNlcnZlcihzdHlsZSgpLCB0aGlzKTsKICAgICBpZiAoc3Ryb2tlUGFpbnRTZXJ2ZXIpIHsKICAg
ICAgICAgY29udGV4dC0+YWRkUGF0aChwYXRoKCkpOyAvLyBwYXRoIGlzIGNsZWFyZWQgd2hlbiBm
aWxsZWQuCiAgICAgICAgIHN0cm9rZVBhaW50U2VydmVyLT5zZXRBY3RpdmVDbGllbnQodGhpcyk7
CiAgICAgICAgIHN0cm9rZVBhaW50U2VydmVyLT5kcmF3KGNvbnRleHQsIHRoaXMsIEFQUExZX1RP
X1NUUk9LRSk7CiAgICAgfQogCi0gICAgZHJhd01hcmtlcnNJZk5lZWRlZChwYWludEluZm8ucCwg
cGFpbnRJbmZvLnIsIHBhdGgoKSk7CisgICAgZHJhd01hcmtlcnNJZk5lZWRlZChwYWludEluZm8u
Y29udGV4dCwgcGFpbnRJbmZvLnJlY3QsIHBhdGgoKSk7CiAKICAgICAvLyBhY3R1YWxseSBhcHBs
eSB0aGUgZmlsdGVyCiAgICAgaWYgKGZpbHRlcikKQEAgLTIyMiw3ICsyMjIsNyBAQCB2b2lkIFJl
bmRlclBhdGg6OnBhaW50KFBhaW50SW5mbyAmcGFpbnRJCiAKICAgICAvLyByZXN0b3JlIGRyYXdp
bmcgc3RhdGUKICAgICBpZiAoIXNob3VsZFBvcENvbnRleHQpCi0gICAgICAgIHBhaW50SW5mby5w
LT5yZXN0b3JlKCk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIGRldmljZS0+cG9wQ29udGV4dCgpOwogICAgICAgICBkZWxldGUgY29u
dGV4dDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHJldmlzaW9uIDE3
NTE2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MSwzNiArNDEsMzYgQEAgUmVuZGVyUmVwbGFjZWQ6OlJlbmRlclJlcGxhY2VkKE5v
ZGUqIG5vZAogICAgIG1fc2VsZWN0aW9uU3RhdGUgPSBTZWxlY3Rpb25Ob25lOwogfQogCi1ib29s
IFJlbmRlclJlcGxhY2VkOjpzaG91bGRQYWludChQYWludEluZm8mIGksIGludCYgX3R4LCBpbnQm
IF90eSkKK2Jvb2wgUmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBhaW50KFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBpbnQmIHR4LCBpbnQmIHR5KQogewotICAgIGlmIChpLnBoYXNlICE9IFBhaW50UGhhc2VG
b3JlZ3JvdW5kICYmIGkucGhhc2UgIT0gUGFpbnRQaGFzZU91dGxpbmUgJiYgaS5waGFzZSAhPSBQ
YWludFBoYXNlU2VsZk91dGxpbmUgCi0gICAgICAgICYmIGkucGhhc2UgIT0gUGFpbnRQaGFzZVNl
bGVjdGlvbikKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5k
ICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlT3V0bGluZSAmJiBwYWludEluZm8ucGhh
c2UgIT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lIAorICAgICAgICAgICAgJiYgcGFpbnRJbmZvLnBo
YXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmICghc2hvdWxkUGFpbnRXaXRoaW5Sb290KGkpKQorICAgIGlmICghc2hvdWxkUGFpbnRXaXRo
aW5Sb290KHBhaW50SW5mbykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAg
Ly8gaWYgd2UncmUgaW52aXNpYmxlIG9yIGhhdmVuJ3QgcmVjZWl2ZWQgYSBsYXlvdXQgeWV0LCB0
aGVuIGp1c3QgYmFpbC4KICAgICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGludCB0eCA9IF90eCArIG1feDsKLSAgICBp
bnQgdHkgPSBfdHkgKyBtX3k7CisgICAgaW50IGN1cnJlbnRUWCA9IHR4ICsgbV94OworICAgIGlu
dCBjdXJyZW50VFkgPSB0eSArIG1feTsKIAogICAgIC8vIEVhcmx5IGV4aXQgaWYgdGhlIGVsZW1l
bnQgdG91Y2hlcyB0aGUgZWRnZXMuCi0gICAgaW50IHRvcCA9IHR5OwotICAgIGludCBib3R0b20g
PSB0eSArIG1faGVpZ2h0OworICAgIGludCB0b3AgPSBjdXJyZW50VFk7CisgICAgaW50IGJvdHRv
bSA9IGN1cnJlbnRUWSArIG1faGVpZ2h0OwogICAgIGlmIChpc1NlbGVjdGVkKCkgJiYgbV9pbmxp
bmVCb3hXcmFwcGVyKSB7Ci0gICAgICAgIGludCBzZWxUb3AgPSBfdHkgKyBtX2lubGluZUJveFdy
YXBwZXItPnJvb3QoKS0+c2VsZWN0aW9uVG9wKCk7Ci0gICAgICAgIGludCBzZWxCb3R0b20gPSBf
dHkgKyBzZWxUb3AgKyBtX2lubGluZUJveFdyYXBwZXItPnJvb3QoKS0+c2VsZWN0aW9uSGVpZ2h0
KCk7CisgICAgICAgIGludCBzZWxUb3AgPSB0eSArIG1faW5saW5lQm94V3JhcHBlci0+cm9vdCgp
LT5zZWxlY3Rpb25Ub3AoKTsKKyAgICAgICAgaW50IHNlbEJvdHRvbSA9IHR5ICsgc2VsVG9wICsg
bV9pbmxpbmVCb3hXcmFwcGVyLT5yb290KCktPnNlbGVjdGlvbkhlaWdodCgpOwogICAgICAgICB0
b3AgPSBtaW4oc2VsVG9wLCB0b3ApOwogICAgICAgICBib3R0b20gPSBtYXgoc2VsQm90dG9tLCBi
b3R0b20pOwogICAgIH0KICAgICAKLSAgICBpbnQgb3MgPSAyKm1heGltYWxPdXRsaW5lU2l6ZShp
LnBoYXNlKTsKLSAgICBpZiAodHggPj0gaS5yLnJpZ2h0KCkgKyBvcyB8fCB0eCArIG1fd2lkdGgg
PD0gaS5yLngoKSAtIG9zKQorICAgIGludCBvcyA9IDIgKiBtYXhpbWFsT3V0bGluZVNpemUocGFp
bnRJbmZvLnBoYXNlKTsKKyAgICBpZiAoY3VycmVudFRYID49IHBhaW50SW5mby5yZWN0LnJpZ2h0
KCkgKyBvcyB8fCBjdXJyZW50VFggKyBtX3dpZHRoIDw9IHBhaW50SW5mby5yZWN0LngoKSAtIG9z
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHRvcCA+PSBpLnIuYm90dG9tKCkgKyBv
cyB8fCBib3R0b20gPD0gaS5yLnkoKSAtIG9zKQorICAgIGlmICh0b3AgPj0gcGFpbnRJbmZvLnJl
Y3QuYm90dG9tKCkgKyBvcyB8fCBib3R0b20gPD0gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3MpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwCShyZXZpc2lvbiAxNzUxNikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NywxOCArMTI3LDE4IEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpsYXlvdXQoKQogCiB2b2lk
IFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBwYXJl
bnRYLCBpbnQgcGFyZW50WSkKIHsKLSAgICBpZiAocGFpbnRJbmZvLnAtPnBhaW50aW5nRGlzYWJs
ZWQoKSkKKyAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgLy8gTm8gb25lIHNob3VsZCBiZSB0cmFuc2Zvcm1p
bmcgdXMgdmlhIHRoZXNlLgogICAgIC8vQVNTRVJUKG1feCA9PSAwKTsKICAgICAvL0FTU0VSVCht
X3kgPT0gMCk7Ci0gICAgICAgIAorCiAgICAgaWYgKHNob3VsZFBhaW50QmFja2dyb3VuZE9yQm9y
ZGVyKCkgJiYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBwYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbikpIAogICAgICAgICBwYWludEJveERl
Y29yYXRpb25zKHBhaW50SW5mbywgcGFyZW50WCwgcGFyZW50WSk7Ci0gICAgCisKICAgICBpZiAo
KHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlT3V0bGluZSB8fCBwYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSAmJiBzdHlsZSgpLT5vdXRsaW5lV2lkdGgoKSAmJiBz
dHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKLSAgICAgICAgcGFpbnRPdXRsaW5lKHBh
aW50SW5mby5wLCBwYXJlbnRYLCBwYXJlbnRZLCB3aWR0aCgpLCBoZWlnaHQoKSwgc3R5bGUoKSk7
CisgICAgICAgIHBhaW50T3V0bGluZShwYWludEluZm8uY29udGV4dCwgcGFyZW50WCwgcGFyZW50
WSwgd2lkdGgoKSwgaGVpZ2h0KCksIHN0eWxlKCkpOwogICAgIAogICAgIGlmIChwYWludEluZm8u
cGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgIWRyYXdzQ29udGVudHMoKSB8fCBzdHls
ZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOKQogICAgICAgICByZXR1cm47CkBAIC0xNTIsMTIg
KzE1MiwxMiBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZvCiAgICAg
Ym9vbCBzaG91bGRQb3BDb250ZXh0ID0gZmFsc2U7CiAgICAgaWYgKCFkZXZpY2VDb250ZXh0KSB7
CiAgICAgICAgIC8vIEkgb25seSBuZWVkIHRvIHNldHVwIGZvciBLQ2FudmFzIHJlbmRlcmluZyBp
ZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGRvbmUuCi0gICAgICAgIGRldmljZUNvbnRleHQgPSBw
YWludEluZm8ucC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4dCgpOworICAgICAgICBkZXZp
Y2VDb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPmNyZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRl
eHQoKTsKICAgICAgICAgZGV2aWNlLT5wdXNoQ29udGV4dChkZXZpY2VDb250ZXh0KTsKICAgICAg
ICAgc2hvdWxkUG9wQ29udGV4dCA9IHRydWU7CiAgICAgfSBlbHNlCi0gICAgICAgIHBhaW50SW5m
by5wLT5zYXZlKCk7Ci0gICAgCisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisK
ICAgICBpZiAocGFyZW50WCAhPSAwIHx8IHBhcmVudFkgIT0gMCkgewogICAgICAgICAvLyBUcmFu
c2xhdGUgZnJvbSBwYXJlbnQgb2Zmc2V0cyAoaHRtbCByZW5kZXJlcnMpIHRvIGEgcmVsYXRpdmUg
dHJhbnNmb3JtIChzdmcgcmVuZGVyZXJzKQogICAgICAgICBkZXZpY2VDb250ZXh0LT5jb25jYXRD
VE0oQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKHBhcmVudFgsIHBhcmVudFkpKTsKQEAgLTE2
NiwxMCArMTY2LDEwIEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWludEluZm8K
ICAgICAKICAgICBpZiAoIXZpZXdwb3J0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChzdHls
ZSgpLT5vdmVyZmxvd1goKSAhPSBPVklTSUJMRSkKLSAgICAgICAgICAgIHBhaW50SW5mby5wLT5j
bGlwKGVuY2xvc2luZ0ludFJlY3Qodmlld3BvcnQoKSkpOyAvLyBGSVhNRTogRXZlbnR1YWxseSB3
ZSdsbCB3YW50IGZsb2F0LXByZWNpc2lvbiBjbGlwcGluZworICAgICAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPmNsaXAoZW5jbG9zaW5nSW50UmVjdCh2aWV3cG9ydCgpKSk7IC8vIEZJWE1FOiBF
dmVudHVhbGx5IHdlJ2xsIHdhbnQgZmxvYXQtcHJlY2lzaW9uIGNsaXBwaW5nCiAgICAgICAgIGRl
dmljZUNvbnRleHQtPmNvbmNhdENUTShBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUodmlld3Bv
cnQoKS54KCksIHZpZXdwb3J0KCkueSgpKSk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKCFsb2Nh
bFRyYW5zZm9ybSgpLmlzSWRlbnRpdHkoKSkKICAgICAgICAgZGV2aWNlQ29udGV4dC0+Y29uY2F0
Q1RNKGxvY2FsVHJhbnNmb3JtKCkpOwogICAgIApAQCAtMTgzLDggKzE4Myw4IEBAIHZvaWQgUmVu
ZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWludEluZm8KIAogICAgIGZsb2F0IG9wYWNpdHkgPSBz
dHlsZSgpLT5vcGFjaXR5KCk7CiAgICAgaWYgKG9wYWNpdHkgPCAxLjBmKSB7Ci0gICAgICAgIHBh
aW50SW5mby5wLT5jbGlwKGVuY2xvc2luZ0ludFJlY3Qoc3Ryb2tlQkJveCkpOwotICAgICAgICBw
YWludEluZm8ucC0+YmVnaW5UcmFuc3BhcmVuY3lMYXllcihvcGFjaXR5KTsKKyAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPmNsaXAoZW5jbG9zaW5nSW50UmVjdChzdHJva2VCQm94KSk7CisgICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwog
ICAgIH0KIAogICAgIGlmIChmaWx0ZXIpCkBAIC0xOTIsMjEgKzE5MiwyMSBAQCB2b2lkIFJlbmRl
clNWR0NvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZvCiAgICAgCiAgICAgaWYgKCF2aWV3Qm94KCku
aXNFbXB0eSgpKQogICAgICAgICBkZXZpY2VDb250ZXh0LT5jb25jYXRDVE0odmlld3BvcnRUcmFu
c2Zvcm0oKSk7Ci0gICAgCisKICAgICBSZW5kZXJDb250YWluZXI6OnBhaW50KHBhaW50SW5mbywg
MCwgMCk7Ci0gICAgCisKICAgICBpZiAoZmlsdGVyKQogICAgICAgICBmaWx0ZXItPmFwcGx5Rmls
dGVyKHN0cm9rZUJCb3gpOwotICAgIAorCiAgICAgaWYgKG9wYWNpdHkgPCAxLjBmKQotICAgICAg
ICBwYWludEluZm8ucC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKLSAgICAKKyAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisKICAgICAvLyByZXN0b3Jl
IGRyYXdpbmcgc3RhdGUKICAgICBpZiAoc2hvdWxkUG9wQ29udGV4dCkgewogICAgICAgICBkZXZp
Y2UtPnBvcENvbnRleHQoKTsKICAgICAgICAgZGVsZXRlIGRldmljZUNvbnRleHQ7CiAgICAgfSBl
bHNlCi0gICAgICAgIHBhaW50SW5mby5wLT5yZXN0b3JlKCk7CisgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdDb250YWluZXI6OnZp
ZXdwb3J0KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5l
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5o
CShyZXZpc2lvbiAxNzUxNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5l
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2
aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgp
OwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8gJnBhaW50SW5mbywgaW50IHBhcmVu
dFgsIGludCBwYXJlbnRZKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50
IHBhcmVudFgsIGludCBwYXJlbnRZKTsKICAgICAKICAgICB2aXJ0dWFsIEludFJlY3QgZ2V0QWJz
b2x1dGVSZXBhaW50UmVjdCgpOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2Uu
Y3BwCShyZXZpc2lvbiAxNzUxNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0ltYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDE3ICsxMjQsMTcgQEAgdm9pZCBSZW5kZXJTVkdJ
bWFnZTo6YWRqdXN0UmVjdHNGb3JBc3BlYwogCiB2b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKQogewotICAgIGlm
IChwYWludEluZm8ucC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IChwYWludEluZm8ucGhhc2UgIT0g
UGFpbnRQaGFzZUZvcmVncm91bmQpIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURERU4p
CisgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgKHBhaW50
SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0
eSgpID09IEhJRERFTikKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEtSZW5kZXJpbmdEZXZp
Y2UqIGRldmljZSA9IHJlbmRlcmluZ0RldmljZSgpOwogICAgIEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0KiBjb250ZXh0ID0gZGV2aWNlLT5jdXJyZW50Q29udGV4dCgpOwogICAgIGJvb2wgc2hvdWxk
UG9wQ29udGV4dCA9IGZhbHNlOwogICAgIGlmIChjb250ZXh0KQotICAgICAgICBwYWludEluZm8u
cC0+c2F2ZSgpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgIGVsc2Ug
ewogICAgICAgICAvLyBOZWVkIHRvIHB1c2ggYSBkZXZpY2UgY29udGV4dCBvbiB0aGUgc3RhY2sg
aWYgZW1wdHkuCi0gICAgICAgIGNvbnRleHQgPSBwYWludEluZm8ucC0+Y3JlYXRlUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCgpOworICAgICAgICBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPmNy
ZWF0ZVJlbmRlcmluZ0RldmljZUNvbnRleHQoKTsKICAgICAgICAgZGV2aWNlLT5wdXNoQ29udGV4
dChjb250ZXh0KTsKICAgICAgICAgc2hvdWxkUG9wQ29udGV4dCA9IHRydWU7CiAgICAgfQpAQCAt
MTQ1LDcgKzE0NSw3IEBAIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OnBhaW50KFBhaW50SW5mbyYgcGEK
ICAgICAKICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSBGbG9hdFJlY3QoMCwgMCwgd2lkdGgo
KSwgaGVpZ2h0KCkpOwogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdmdTdHlsZSA9IHN0eWxl
KCktPnN2Z1N0eWxlKCk7Ci0gICAgICAgICAgICAKKwogICAgIGlmIChTVkdSZXNvdXJjZUNsaXBw
ZXIqIGNsaXBwZXIgPSBnZXRDbGlwcGVyQnlJZChkb2N1bWVudCgpLCBzdmdTdHlsZS0+Y2xpcFBh
dGgoKS5zdWJzdHJpbmcoMSkpKQogICAgICAgICBjbGlwcGVyLT5hcHBseUNsaXAoYm91bmRpbmdC
b3gpOwogCkBAIC0xNjUsMTMgKzE2NSwxMyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQ
YWludEluZm8mIHBhCiAgICAgfQogCiAgICAgUGFpbnRJbmZvIHBpKHBhaW50SW5mbyk7Ci0gICAg
cGkucCA9IGMuZ2V0KCk7Ci0gICAgcGkuciA9IGFic29sdXRlVHJhbnNmb3JtKCkuaW52ZXJ0KCku
bWFwUmVjdChwYWludEluZm8ucik7CisgICAgcGkuY29udGV4dCA9IGMuZ2V0KCk7CisgICAgcGku
cmVjdCA9IGFic29sdXRlVHJhbnNmb3JtKCkuaW52ZXJ0KCkubWFwUmVjdChwYWludEluZm8ucmVj
dCk7CiAKICAgICBpbnQgeCA9IDAsIHkgPSAwOwogICAgIGlmIChzaG91bGRQYWludChwaSwgeCwg
eSkpIHsKLSAgICAgICAgU1ZHSW1hZ2VFbGVtZW50ICppbWFnZUVsdCA9IHN0YXRpY19jYXN0PFNW
R0ltYWdlRWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgICAgIAorICAgICAgICBTVkdJbWFnZUVsZW1l
bnQqIGltYWdlRWx0ID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50Kj4obm9kZSgpKTsKKwog
ICAgICAgICBpZiAoaW1hZ2VFbHQtPnByZXNlcnZlQXNwZWN0UmF0aW8oKS0+YWxpZ24oKSA9PSBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19OT05FKQogICAg
ICAgICAgICAgUmVuZGVySW1hZ2U6OnBhaW50KHBpLCAwLCAwKTsKICAgICAgICAgZWxzZSB7CkBA
IC0xOTAsNyArMTkwLDcgQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBw
YQogCiAgICAgLy8gcmVzdG9yZSBkcmF3aW5nIHN0YXRlCiAgICAgaWYgKCFzaG91bGRQb3BDb250
ZXh0KQotICAgICAgICBwYWludEluZm8ucC0+cmVzdG9yZSgpOworICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+cmVzdG9yZSgpOwogICAgIGVsc2UgewogICAgICAgICBkZXZpY2UtPnBvcENvbnRl
eHQoKTsKICAgICAgICAgZGVsZXRlIGNvbnRleHQ7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdUZXh0LmNwcAkocmV2aXNpb24gMTc1MTYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDE0ICsxMTMsMTQgQEAgdm9pZCBSZW5k
ZXJTVkdUZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcgogICAgIHJlY3RzLmFwcGVuZChlbmNsb3Np
bmdJbnRSZWN0KGJveFRyYW5zZm9ybS5tYXBSZWN0KGJveFJlY3QpKSk7CiB9CiAKLXZvaWQgUmVu
ZGVyU1ZHVGV4dDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBfdHgsIGludCBfdHkp
Cit2b2lkIFJlbmRlclNWR1RleHQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgs
IGludCB0eSkKIHsgICAgCiAgICAgS1JlbmRlcmluZ0RldmljZSogZGV2aWNlID0gcmVuZGVyaW5n
RGV2aWNlKCk7CiAgICAgUmVuZGVyT2JqZWN0OjpQYWludEluZm8gcGkgPSBwYWludEluZm87CiAg
ICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gYyhkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCktPmNy
ZWF0ZUdyYXBoaWNzQ29udGV4dCgpKTsKLSAgICBwaS5wID0gYy5nZXQoKTsKLSAgICBwaS5yID0g
KGFic29sdXRlVHJhbnNmb3JtKCkpLmludmVydCgpLm1hcFJlY3QocGFpbnRJbmZvLnIpOwotICAg
IFJlbmRlckJsb2NrOjpwYWludChwaSwgX3R4LCBfdHkpOworICAgIHBpLmNvbnRleHQgPSBjLmdl
dCgpOworICAgIHBpLnJlY3QgPSAoYWJzb2x1dGVUcmFuc2Zvcm0oKSkuaW52ZXJ0KCkubWFwUmVj
dChwYWludEluZm8ucmVjdCk7CisgICAgUmVuZGVyQmxvY2s6OnBhaW50KHBpLCB0eCwgdHkpOwog
fQogCiBGbG9hdFJlY3QgUmVuZGVyU1ZHVGV4dDo6cmVsYXRpdmVCQm94KGJvb2wgaW5jbHVkZVN0
cm9rZSkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmgJKHJldmlzaW9uIDE3
NTE2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSwxNiArMzEsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTVkdUZXh0
RWxlbWVudDsKIAotY2xhc3MgUmVuZGVyU1ZHVGV4dCA6IHB1YmxpYyBSZW5kZXJCbG9jawotewor
Y2xhc3MgUmVuZGVyU1ZHVGV4dCA6IHB1YmxpYyBSZW5kZXJCbG9jayB7CiBwdWJsaWM6CiAgICAg
UmVuZGVyU1ZHVGV4dChTVkdUZXh0RWxlbWVudCogbm9kZSk7CiAKLSAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIgKnJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHVGV4dCI7IH0KKyAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVy
U1ZHVGV4dCI7IH0KICAgICAKICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBsb2NhbFRyYW5z
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAgICAgdmlydHVhbCB2b2lkIHNl
dExvY2FsVHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKSB7IG1fdHJh
bnNmb3JtID0gdHJhbnNmb3JtOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYg
aSwgaW50IF90eCwgaW50IF90eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYs
IGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0
eSwgSGl0VGVzdEFjdGlvbik7CiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9y
PEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlQWJz
b2x1dGVSZXBhaW50UmVjdChJbnRSZWN0JiByLCBib29sIGYpOwpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmNwcAkocmV2aXNpb24gMTc1MTYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MCwyMiArMzgwLDIyIEBAIHZvaWQgUmVu
ZGVyVGFibGU6OnNldENlbGxXaWR0aHMoKQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVy
VGFibGVTZWN0aW9uICo+KGNoaWxkKS0+c2V0Q2VsbFdpZHRocygpOwogfQogCi12b2lkIFJlbmRl
clRhYmxlOjpwYWludChQYWludEluZm8mIGksIGludCBfdHgsIGludCBfdHkpCit2b2lkIFJlbmRl
clRhYmxlOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7Ci0g
ICAgX3R4ICs9IHhQb3MoKTsKLSAgICBfdHkgKz0geVBvcygpOworICAgIHR4ICs9IHhQb3MoKTsK
KyAgICB0eSArPSB5UG9zKCk7CiAKLSAgICBQYWludFBoYXNlIHBhaW50UGhhc2UgPSBpLnBoYXNl
OwotICAgIAotICAgIGludCBvcyA9IDIqbWF4aW1hbE91dGxpbmVTaXplKHBhaW50UGhhc2UpOwot
ICAgIGlmIChfdHkgPj0gaS5yLmJvdHRvbSgpICsgb3MgfHwgX3R5ICsgaGVpZ2h0KCkgPD0gaS5y
LnkoKSAtIG9zKQorICAgIFBhaW50UGhhc2UgcGFpbnRQaGFzZSA9IHBhaW50SW5mby5waGFzZTsK
KworICAgIGludCBvcyA9IDIgKiBtYXhpbWFsT3V0bGluZVNpemUocGFpbnRQaGFzZSk7CisgICAg
aWYgKHR5ID49IHBhaW50SW5mby5yZWN0LmJvdHRvbSgpICsgb3MgfHwgdHkgKyBoZWlnaHQoKSA8
PSBwYWludEluZm8ucmVjdC55KCkgLSBvcykKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChfdHgg
Pj0gaS5yLnJpZ2h0KCkgKyBvcyB8fCBfdHggKyB3aWR0aCgpIDw9IGkuci54KCkgLSBvcykKKyAg
ICBpZiAodHggPj0gcGFpbnRJbmZvLnJlY3QucmlnaHQoKSArIG9zIHx8IHR4ICsgd2lkdGgoKSA8
PSBwYWludEluZm8ucmVjdC54KCkgLSBvcykKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKChw
YWludFBoYXNlID09IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQgfHwgcGFpbnRQaGFzZSA9PSBQ
YWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmQpCiAgICAgICAgICYmIHNob3VsZFBhaW50QmFj
a2dyb3VuZE9yQm9yZGVyKCkgJiYgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCi0g
ICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMoaSwgX3R4LCBfdHkpOworICAgICAgICBwYWludEJv
eERlY29yYXRpb25zKHBhaW50SW5mbywgdHgsIHR5KTsKIAogICAgIC8vIFdlJ3JlIGRvbmUuICBX
ZSBkb24ndCBib3RoZXIgcGFpbnRpbmcgYW55IGNoaWxkcmVuLgogICAgIGlmIChwYWludFBoYXNl
ID09IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQpCkBAIC00MDQsMTIgKzQwNCwxMyBAQCB2b2lk
IFJlbmRlclRhYmxlOjpwYWludChQYWludEluZm8mIGksIGluCiAgICAgLy8gV2UgZG9uJ3QgcGFp
bnQgb3VyIG93biBiYWNrZ3JvdW5kLCBidXQgd2UgZG8gbGV0IHRoZSBraWRzIHBhaW50IHRoZWly
IGJhY2tncm91bmRzLgogICAgIGlmIChwYWludFBoYXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2Nr
QmFja2dyb3VuZHMpCiAgICAgICAgIHBhaW50UGhhc2UgPSBQYWludFBoYXNlQ2hpbGRCbG9ja0Jh
Y2tncm91bmQ7Ci0gICAgUGFpbnRJbmZvIHBhaW50SW5mbyhpKTsKLSAgICBwYWludEluZm8ucGhh
c2UgPSBwYWludFBoYXNlOwotICAgIAotICAgIGZvciAoUmVuZGVyT2JqZWN0ICpjaGlsZCA9IGZp
cnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgUGFp
bnRJbmZvIGluZm8ocGFpbnRJbmZvKTsKKyAgICBpbmZvLnBoYXNlID0gcGFpbnRQaGFzZTsKKwor
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFjaGlsZC0+bGF5ZXIoKSAm
JiAoY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkgfHwgY2hpbGQgPT0gdENhcHRpb24pKQotICAgICAg
ICAgICAgY2hpbGQtPnBhaW50KHBhaW50SW5mbywgX3R4LCBfdHkpOworICAgICAgICAgICAgY2hp
bGQtPnBhaW50KGluZm8sIHR4LCB0eSk7CisgICAgfQogCiAgICAgaWYgKGNvbGxhcHNlQm9yZGVy
cygpICYmIHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kICYmIHN0
eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKSB7CiAgICAgICAgIC8vIENvbGxlY3QgYWxs
IHRoZSB1bmlxdWUgYm9yZGVyIHN0eWxlcyB0aGF0IHdlIHdhbnQgdG8gcGFpbnQgaW4gYSBzb3J0
ZWQgbGlzdC4gIE9uY2Ugd2UKQEAgLTQyMiw0MSArNDIzLDQyIEBAIHZvaWQgUmVuZGVyVGFibGU6
OnBhaW50KFBhaW50SW5mbyYgaSwgaW4KICAgICAgICAgRGVwcmVjYXRlZFZhbHVlTGlzdEl0ZXJh
dG9yPENvbGxhcHNlZEJvcmRlclZhbHVlPiBlbmQgPSBib3JkZXJTdHlsZXMuZW5kKCk7CiAgICAg
ICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgIG1fY3VycmVudEJvcmRl
ciA9ICYoKml0KTsKLSAgICAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICAg
ICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc1Rh
YmxlU2VjdGlvbigpKQotICAgICAgICAgICAgICAgICAgICBjaGlsZC0+cGFpbnQocGFpbnRJbmZv
LCBfdHgsIF90eSk7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5wYWludChpbmZvLCB0eCwg
dHkpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgICAgICAKKwogI2lmZGVm
IEJPWF9ERUJVRwotICAgIG91dGxpbmVCb3goaS5wLCBfdHgsIF90eSwgImJsdWUiKTsKKyAgICBv
dXRsaW5lQm94KHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksICJibHVlIik7CiAjZW5kaWYKIH0K
IAotdm9pZCBSZW5kZXJUYWJsZTo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIGksIGlu
dCBfdHgsIGludCBfdHkpCit2b2lkIFJlbmRlclRhYmxlOjpwYWludEJveERlY29yYXRpb25zKFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKICAgICBpbnQgdyA9IHdpZHRo
KCk7CiAgICAgaW50IGggPSBoZWlnaHQoKTsKLSAgICAKKwogICAgIC8vIEFjY291bnQgZm9yIHRo
ZSBjYXB0aW9uLgogICAgIGlmICh0Q2FwdGlvbikgewogICAgICAgICBpbnQgY2FwdGlvbkhlaWdo
dCA9ICh0Q2FwdGlvbi0+aGVpZ2h0KCkgKyB0Q2FwdGlvbi0+bWFyZ2luQm90dG9tKCkgKyAgdENh
cHRpb24tPm1hcmdpblRvcCgpKTsKICAgICAgICAgaCAtPSBjYXB0aW9uSGVpZ2h0OwogICAgICAg
ICBpZiAodENhcHRpb24tPnN0eWxlKCktPmNhcHRpb25TaWRlKCkgIT0gQ0FQQk9UVE9NKQotICAg
ICAgICAgICAgX3R5ICs9IGNhcHRpb25IZWlnaHQ7CisgICAgICAgICAgICB0eSArPSBjYXB0aW9u
SGVpZ2h0OwogICAgIH0KIAotICAgIGludCBteSA9IG1heChfdHksIGkuci55KCkpOworICAgIGlu
dCBteSA9IG1heCh0eSwgcGFpbnRJbmZvLnJlY3QueSgpKTsKICAgICBpbnQgbWg7Ci0gICAgaWYg
KF90eSA8IGkuci55KCkpCi0gICAgICAgIG1oPSBtYXgoMCwgaCAtIChpLnIueSgpIC0gX3R5KSk7
CisgICAgaWYgKHR5IDwgcGFpbnRJbmZvLnJlY3QueSgpKQorICAgICAgICBtaCA9IG1heCgwLCBo
IC0gKHBhaW50SW5mby5yZWN0LnkoKSAtIHR5KSk7CiAgICAgZWxzZQotICAgICAgICBtaCA9IG1p
bihpLnIuaGVpZ2h0KCksIGgpOwotICAgIAotICAgIHBhaW50QmFja2dyb3VuZChpLnAsIHN0eWxl
KCktPmJhY2tncm91bmRDb2xvcigpLCBzdHlsZSgpLT5iYWNrZ3JvdW5kTGF5ZXJzKCksIG15LCBt
aCwgX3R4LCBfdHksIHcsIGgpOwotICAgIAorICAgICAgICBtaCA9IG1pbihwYWludEluZm8ucmVj
dC5oZWlnaHQoKSwgaCk7CisKKyAgICBwYWludEJhY2tncm91bmQocGFpbnRJbmZvLmNvbnRleHQs
IHN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpLCBzdHlsZSgpLT5iYWNrZ3JvdW5kTGF5ZXJzKCks
IG15LCBtaCwgdHgsIHR5LCB3LCBoKTsKKwogICAgIGlmIChzdHlsZSgpLT5oYXNCb3JkZXIoKSAm
JiAhY29sbGFwc2VCb3JkZXJzKCkpCi0gICAgICAgIHBhaW50Qm9yZGVyKGkucCwgX3R4LCBfdHks
IHcsIGgsIHN0eWxlKCkpOworICAgICAgICBwYWludEJvcmRlcihwYWludEluZm8uY29udGV4dCwg
dHgsIHR5LCB3LCBoLCBzdHlsZSgpKTsKIH0KIAogdm9pZCBSZW5kZXJUYWJsZTo6Y2FsY01pbk1h
eFdpZHRoKCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkocmV2aXNpb24gMTc1MTYpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEs
NyArMTAxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IG92ZXJmbG93SGVpZ2h0KGJvb2wg
aW5jbHVkZUludGVyaW9yID0gdHJ1ZSkgY29uc3QgeyByZXR1cm4gaGVpZ2h0KCk7IH0KICAgICB2
aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBi
ZWZvcmVDaGlsZCA9IDApOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQg
dHgsIGludCB0eSk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJ
bmZvJiwgaW50IF90eCwgaW50IF90eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50Qm94RGVjb3Jh
dGlvbnMoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlv
dXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7CiAKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkocmV2aXNpb24gMTc1MTYpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzcsMjgg
KzUzNywyOSBAQCBzdGF0aWMgdm9pZCBvdXRsaW5lQm94KEdyYXBoaWNzQ29udGV4dCogCiB9CiAj
ZW5kaWYKIAotdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50KFBhaW50SW5mbyYgaSwgaW50IF90
eCwgaW50IF90eSkKK3ZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludChQYWludEluZm8mIHBhaW50
SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgX3R4ICs9IG1feDsKLSAgICBfdHkgKz0gbV95
OworICAgIHR4ICs9IG1feDsKKyAgICB0eSArPSBtX3k7CiAKICAgICAvLyBjaGVjayBpZiB3ZSBu
ZWVkIHRvIGRvIGFueXRoaW5nIGF0IGFsbC4uLgotICAgIGludCBvcyA9IDIqbWF4aW1hbE91dGxp
bmVTaXplKGkucGhhc2UpOworICAgIGludCBvcyA9IDIgKiBtYXhpbWFsT3V0bGluZVNpemUocGFp
bnRJbmZvLnBoYXNlKTsKIAotICAgIGlmIChpLnBoYXNlID09IFBhaW50UGhhc2VDb2xsYXBzZWRU
YWJsZUJvcmRlcnMgJiYgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsKLSAgICAg
ICAgaWYgKF90eSAtIHRhYmxlKCktPm91dGVyQm9yZGVyVG9wKCkgPj0gaS5yLmJvdHRvbSgpICsg
b3MgfHwgX3R5ICsgX3RvcEV4dHJhICsgbV9oZWlnaHQgKyBfYm90dG9tRXh0cmEgKyB0YWJsZSgp
LT5vdXRlckJvcmRlckJvdHRvbSgpIDw9IGkuci55KCkgLSBvcykKKyAgICBpZiAocGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2VDb2xsYXBzZWRUYWJsZUJvcmRlcnMgJiYgc3R5bGUoKS0+dmlz
aWJpbGl0eSgpID09IFZJU0lCTEUpIHsKKyAgICAgICAgaWYgKHR5IC0gdGFibGUoKS0+b3V0ZXJC
b3JkZXJUb3AoKSA+PSBwYWludEluZm8ucmVjdC5ib3R0b20oKSArIG9zIHx8CisgICAgICAgICAg
ICAgICAgdHkgKyBfdG9wRXh0cmEgKyBtX2hlaWdodCArIF9ib3R0b21FeHRyYSArIHRhYmxlKCkt
Pm91dGVyQm9yZGVyQm90dG9tKCkgPD0gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3MpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGludCB3ID0gd2lkdGgoKTsKICAgICAgICAgaW50IGggPSBo
ZWlnaHQoKSArIGJvcmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0b21FeHRyYSgpOwotICAgICAg
ICBwYWludENvbGxhcHNlZEJvcmRlcihpLnAsIF90eCwgX3R5LCB3LCBoKTsKKyAgICAgICAgcGFp
bnRDb2xsYXBzZWRCb3JkZXIocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgdywgaCk7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKF90eSA+PSBpLnIuYm90dG9tKCkgKyBvcyB8fCBfdHkgKyBf
dG9wRXh0cmEgKyBtX2hlaWdodCArIF9ib3R0b21FeHRyYSA8PSBpLnIueSgpIC0gb3MpCisgICAg
ICAgIGlmICh0eSA+PSBwYWludEluZm8ucmVjdC5ib3R0b20oKSArIG9zIHx8IHR5ICsgX3RvcEV4
dHJhICsgbV9oZWlnaHQgKyBfYm90dG9tRXh0cmEgPD0gcGFpbnRJbmZvLnJlY3QueSgpIC0gb3Mp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFJlbmRlckJsb2NrOjpwYWludE9iamVjdChp
LCBfdHgsIF90eSArIF90b3BFeHRyYSk7CisgICAgICAgIFJlbmRlckJsb2NrOjpwYWludE9iamVj
dChwYWludEluZm8sIHR4LCB0eSArIF90b3BFeHRyYSk7CiAgICAgfQogCiAjaWZkZWYgQk9YX0RF
QlVHCi0gICAgOjpvdXRsaW5lQm94KCBpLnAsIF90eCwgX3R5LCB3aWR0aCgpLCBoZWlnaHQoKSAr
IGJvcmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0b21FeHRyYSgpKTsKKyAgICA6Om91dGxpbmVC
b3gocGFpbnRJbmZvLmNvbnRleHQsIHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkgKyBib3JkZXJU
b3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKSk7CiAjZW5kaWYKIH0KIApAQCAtNzAwLDcg
KzcwMSw3IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludENvbGxhcHNlZEJvcmQKICAgICB9
CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChQ
YWludEluZm8mIGksIGludCBfdHgsIGludCBfdHksIFJlbmRlck9iamVjdCogYmFja2dyb3VuZE9i
amVjdCkKK3ZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChQ
YWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHksIFJlbmRlck9iamVjdCogYmFja2dy
b3VuZE9iamVjdCkKIHsKICAgICBpZiAoIWJhY2tncm91bmRPYmplY3QpCiAgICAgICAgIHJldHVy
bjsKQEAgLTcxMCwxOCArNzExLDE4IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpwYWludEJhY2tn
cm91bmRzQmUKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGJhY2tncm91bmRPYmplY3QgIT0g
dGhpcykgewotICAgICAgICBfdHggKz0gbV94OwotICAgICAgICBfdHkgKz0gbV95ICsgX3RvcEV4
dHJhOworICAgICAgICB0eCArPSBtX3g7CisgICAgICAgIHR5ICs9IG1feSArIF90b3BFeHRyYTsK
ICAgICB9CiAKICAgICBpbnQgdyA9IHdpZHRoKCk7CiAgICAgaW50IGggPSBoZWlnaHQoKSArIGJv
cmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0b21FeHRyYSgpOwotICAgIF90eSAtPSBib3JkZXJU
b3BFeHRyYSgpOwotICAgIAotICAgIGludCBteSA9IG1heChfdHksIGkuci55KCkpOwotICAgIGlu
dCBlbmQgPSBtaW4oaS5yLmJvdHRvbSgpLCBfdHkgKyBoKTsKKyAgICB0eSAtPSBib3JkZXJUb3BF
eHRyYSgpOworCisgICAgaW50IG15ID0gbWF4KHR5LCBwYWludEluZm8ucmVjdC55KCkpOworICAg
IGludCBlbmQgPSBtaW4ocGFpbnRJbmZvLnJlY3QuYm90dG9tKCksIHR5ICsgaCk7CiAgICAgaW50
IG1oID0gZW5kIC0gbXk7Ci0gICAgCisKICAgICBDb2xvciBjID0gYmFja2dyb3VuZE9iamVjdC0+
c3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCk7CiAgICAgY29uc3QgQmFja2dyb3VuZExheWVyKiBi
Z0xheWVyID0gYmFja2dyb3VuZE9iamVjdC0+c3R5bGUoKS0+YmFja2dyb3VuZExheWVycygpOwog
CkBAIC03MzAsMzIgKzczMSwzMiBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnRCYWNrZ3Jv
dW5kc0JlCiAgICAgICAgIC8vIG9uIHRvcCBvZiB0aGUgYm9yZGVycyBvdGhlcndpc2UuICBUaGlz
IG9ubHkgbWF0dGVycyBmb3IgY2VsbHMgYW5kIHJvd3MuCiAgICAgICAgIGJvb2wgaGFzTGF5ZXIg
PSBiYWNrZ3JvdW5kT2JqZWN0LT5sYXllcigpICYmIChiYWNrZ3JvdW5kT2JqZWN0ID09IHRoaXMg
fHwgYmFja2dyb3VuZE9iamVjdCA9PSBwYXJlbnQoKSk7CiAgICAgICAgIGlmIChoYXNMYXllciAm
JiB0YWJsZUVsdC0+Y29sbGFwc2VCb3JkZXJzKCkpIHsKLSAgICAgICAgICAgIEludFJlY3QgY2xp
cFJlY3QoX3R4ICsgYm9yZGVyTGVmdCgpLCBfdHkgKyBib3JkZXJUb3AoKSwKKyAgICAgICAgICAg
IEludFJlY3QgY2xpcFJlY3QodHggKyBib3JkZXJMZWZ0KCksIHR5ICsgYm9yZGVyVG9wKCksCiAg
ICAgICAgICAgICAgICAgdyAtIGJvcmRlckxlZnQoKSAtIGJvcmRlclJpZ2h0KCksIGggLSBib3Jk
ZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpKTsKLSAgICAgICAgICAgIGkucC0+c2F2ZSgpOwotICAg
ICAgICAgICAgaS5wLT5jbGlwKGNsaXBSZWN0KTsKKyAgICAgICAgICAgIHBhaW50SW5mby5jb250
ZXh0LT5zYXZlKCk7CisgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChjbGlwUmVj
dCk7CiAgICAgICAgIH0KLSAgICAgICAgcGFpbnRCYWNrZ3JvdW5kKGkucCwgYywgYmdMYXllciwg
bXksIG1oLCBfdHgsIF90eSwgdywgaCk7CisgICAgICAgIHBhaW50QmFja2dyb3VuZChwYWludElu
Zm8uY29udGV4dCwgYywgYmdMYXllciwgbXksIG1oLCB0eCwgdHksIHcsIGgpOwogICAgICAgICBp
ZiAoaGFzTGF5ZXIgJiYgdGFibGVFbHQtPmNvbGxhcHNlQm9yZGVycygpKQotICAgICAgICAgICAg
aS5wLT5yZXN0b3JlKCk7CisgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgp
OwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50Qm94RGVjb3JhdGlvbnMo
UGFpbnRJbmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KQordm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBh
aW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQog
ewogICAgIFJlbmRlclRhYmxlKiB0YWJsZUVsdCA9IHRhYmxlKCk7CiAgICAgaWYgKCF0YWJsZUVs
dC0+Y29sbGFwc2VCb3JkZXJzKCkgJiYgc3R5bGUoKS0+ZW1wdHlDZWxscygpID09IEhJREUgJiYg
IWZpcnN0Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuOwotIAorCiAgICAgLy8gUGFpbnQgb3VyIGNl
bGwgYmFja2dyb3VuZC4KLSAgICBwYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChpLCBfdHgsIF90
eSwgdGhpcyk7CisgICAgcGFpbnRCYWNrZ3JvdW5kc0JlaGluZENlbGwocGFpbnRJbmZvLCB0eCwg
dHksIHRoaXMpOwogCiAgICAgaW50IHcgPSB3aWR0aCgpOwogICAgIGludCBoID0gaGVpZ2h0KCkg
KyBib3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKTsKLSAgICBfdHkgLT0gYm9y
ZGVyVG9wRXh0cmEoKTsKKyAgICB0eSAtPSBib3JkZXJUb3BFeHRyYSgpOwogCiAgICAgaWYgKHN0
eWxlKCktPmhhc0JvcmRlcigpICYmICF0YWJsZUVsdC0+Y29sbGFwc2VCb3JkZXJzKCkpCi0gICAg
ICAgIHBhaW50Qm9yZGVyKGkucCwgX3R4LCBfdHksIHcsIGgsIHN0eWxlKCkpOworICAgICAgICBw
YWludEJvcmRlcihwYWludEluZm8uY29udGV4dCwgdHgsIHR5LCB3LCBoLCBzdHlsZSgpKTsKIH0K
IAogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2Vs
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCShy
ZXZpc2lvbiAxNzUxNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC04NCw5ICs4NCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENlbGxU
b3BFeHRyYShpbnQgcCkgeyBfdG9wRXh0cmEgPSBwOyB9CiAgICAgdm9pZCBzZXRDZWxsQm90dG9t
RXh0cmEoaW50IHApIHsgX2JvdHRvbUV4dHJhID0gcDsgfQogCi0gICAgdmlydHVhbCB2b2lkIHBh
aW50KFBhaW50SW5mbyYgaSwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAKLSAgICB2b2lkIHBhaW50Q29sbGFwc2Vk
Qm9yZGVyKEdyYXBoaWNzQ29udGV4dCogcCwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpOwor
ICAgIHZvaWQgcGFpbnRDb2xsYXBzZWRCb3JkZXIoR3JhcGhpY3NDb250ZXh0KiwgaW50IHgsIGlu
dCB5LCBpbnQgdywgaW50IGgpOwogICAgIAogICAgIC8vIGxpZSBhYm91dCBwb3NpdGlvbiB0byBv
dXRzaWRlIG9ic2VydmVycwogICAgIHZpcnR1YWwgaW50IHlQb3MoKSBjb25zdCB7IHJldHVybiBt
X3kgKyBfdG9wRXh0cmE7IH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJ
KHJldmlzaW9uIDE3NTE2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgYm9vbCBSZW5kZXJUYWJsZVJvdzo6
bm9kZUF0UG9pbnQoY29uc3QgSAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJU
YWJsZVJvdzo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVy
VGFibGVSb3c6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsK
ICAgICBhc3NlcnQobV9sYXllcik7CiAgICAgaWYgKCFtX2xheWVyKQpAQCAtMTY1LDE0ICsxNjUs
MTQgQEAgdm9pZCBSZW5kZXJUYWJsZVJvdzo6cGFpbnQoUGFpbnRJbmZvJiBpLAogICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc1RhYmxlQ2VsbCgpKSB7CiAg
ICAgICAgICAgICAvLyBQYWludCB0aGUgcm93IGJhY2tncm91bmQgYmVoaW5kIHRoZSBjZWxsLgot
ICAgICAgICAgICAgaWYgKGkucGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCB8fCBp
LnBoYXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZCkgeworICAgICAgICAgICAg
aWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kIHx8IHBhaW50
SW5mby5waGFzZSA9PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmQpIHsKICAgICAgICAg
ICAgICAgICBSZW5kZXJUYWJsZUNlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZUNl
bGwqPihjaGlsZCk7Ci0gICAgICAgICAgICAgICAgY2VsbC0+cGFpbnRCYWNrZ3JvdW5kc0JlaGlu
ZENlbGwoaSwgdHgsIHR5LCB0aGlzKTsKKyAgICAgICAgICAgICAgICBjZWxsLT5wYWludEJhY2tn
cm91bmRzQmVoaW5kQ2VsbChwYWludEluZm8sIHR4LCB0eSwgdGhpcyk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoIWNoaWxkLT5sYXllcigpKQotICAgICAgICAgICAgICAgIGNoaWxk
LT5wYWludChpLCB0eCwgdHkpOworICAgICAgICAgICAgICAgIGNoaWxkLT5wYWludChwYWludElu
Zm8sIHR4LCB0eSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAkocmV2aXNpb24gMTc1MTYp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgb25seSB0aW1lIHJvd3MgZ2V0IGEg
bGF5ZXIgaXMgd2hlbiB0aGV5IGhhdmUgdHJhbnNwYXJlbmN5LgogICAgIHZpcnR1YWwgYm9vbCBy
ZXF1aXJlc0xheWVyKCkgeyByZXR1cm4gaXNUcmFuc3BhcmVudCgpIHx8IGhhc092ZXJmbG93Q2xp
cCgpOyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQgdHgsIGlu
dCB0eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5
KTsKIAogICAgIFJlbmRlclRhYmxlKiB0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PFJlbmRlclRhYmxlKj4ocGFyZW50KCktPnBhcmVudCgpKTsgfQogICAgIFJlbmRlclRhYmxlU2Vj
dGlvbiogc2VjdGlvbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2Vj
dGlvbio+KHBhcmVudCgpKTsgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVT
ZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNl
Y3Rpb24uY3BwCShyZXZpc2lvbiAxNzUxNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyOSw3ICs4MjksNyBAQCB2b2lkIFJl
bmRlclRhYmxlU2VjdGlvbjo6cmVjYWxjT3V0ZXJCb3JkCiB9CiAKIAotdm9pZCBSZW5kZXJUYWJs
ZVNlY3Rpb246OnBhaW50KFBhaW50SW5mbyYgaSwgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRl
clRhYmxlU2VjdGlvbjo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5
KQogewogICAgIHVuc2lnbmVkIGludCB0b3RhbFJvd3MgPSBncmlkUm93czsKICAgICB1bnNpZ25l
ZCBpbnQgdG90YWxDb2xzID0gdGFibGUoKS0+Y29sdW1ucy5zaXplKCk7CkBAIC04NDIsMjQgKzg0
MiwyNiBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnQoUGFpbnRJbmZvCiAKICAgICAv
LyBjaGVjayB3aGljaCByb3dzIGFuZCBjb2xzIGFyZSB2aXNpYmxlIGFuZCBvbmx5IHBhaW50IHRo
ZXNlCiAgICAgLy8gIyMjIGZpeG1lOiBjb3VsZCB1c2UgYSBiaW5hcnkgc2VhcmNoIGhlcmUKLSAg
ICBQYWludFBoYXNlIHBhaW50UGhhc2UgPSBpLnBoYXNlOwotICAgIGludCB4ID0gaS5yLngoKTsK
LSAgICBpbnQgeSA9IGkuci55KCk7Ci0gICAgaW50IHcgPSBpLnIud2lkdGgoKTsKLSAgICBpbnQg
aCA9IGkuci5oZWlnaHQoKTsKKyAgICBQYWludFBoYXNlIHBhaW50UGhhc2UgPSBwYWludEluZm8u
cGhhc2U7CisgICAgaW50IHggPSBwYWludEluZm8ucmVjdC54KCk7CisgICAgaW50IHkgPSBwYWlu
dEluZm8ucmVjdC55KCk7CisgICAgaW50IHcgPSBwYWludEluZm8ucmVjdC53aWR0aCgpOworICAg
IGludCBoID0gcGFpbnRJbmZvLnJlY3QuaGVpZ2h0KCk7CiAKICAgICBpbnQgb3MgPSAyICogbWF4
aW1hbE91dGxpbmVTaXplKHBhaW50UGhhc2UpOwogICAgIHVuc2lnbmVkIGludCBzdGFydHJvdyA9
IDA7CiAgICAgdW5zaWduZWQgaW50IGVuZHJvdyA9IHRvdGFsUm93czsKLSAgICBmb3IgKDsgc3Rh
cnRyb3cgPCB0b3RhbFJvd3M7IHN0YXJ0cm93KyspCisgICAgZm9yICg7IHN0YXJ0cm93IDwgdG90
YWxSb3dzOyBzdGFydHJvdysrKSB7CiAgICAgICAgIGlmICh0eSArIHJvd1Bvc1tzdGFydHJvdysx
XSA+PSB5IC0gb3MpCiAgICAgICAgICAgICBicmVhazsKKyAgICB9CiAgICAgaWYgKHN0YXJ0cm93
ID09IHRvdGFsUm93cyAmJiB0eSArIHJvd1Bvc1t0b3RhbFJvd3NdICsgdGFibGUoKS0+b3V0ZXJC
b3JkZXJCb3R0b20oKSA+PSB5IC0gb3MpCiAgICAgICAgIHN0YXJ0cm93LS07CiAKLSAgICBmb3Ig
KDsgZW5kcm93ID4gMDsgZW5kcm93LS0pCi0gICAgICAgIGlmICggdHkgKyByb3dQb3NbZW5kcm93
LTFdIDw9IHkgKyBoICsgb3MpCisgICAgZm9yICg7IGVuZHJvdyA+IDA7IGVuZHJvdy0tKSB7Cisg
ICAgICAgIGlmICh0eSArIHJvd1Bvc1tlbmRyb3ctMV0gPD0geSArIGggKyBvcykKICAgICAgICAg
ICAgIGJyZWFrOworICAgIH0KICAgICBpZiAoZW5kcm93ID09IDAgJiYgdHkgKyByb3dQb3NbMF0g
LSB0YWJsZSgpLT5vdXRlckJvcmRlclRvcCgpIDw9IHkgKyBoICsgb3MpCiAgICAgICAgIGVuZHJv
dysrOwogCkBAIC04NzIsNyArODc0LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50
KFBhaW50SW5mbwogICAgICAgICB9CiAgICAgICAgIGlmIChzdGFydGNvbCA9PSB0b3RhbENvbHMg
JiYgdHggKyB0YWJsZSgpLT5jb2x1bW5Qb3NbdG90YWxDb2xzXSArIHRhYmxlKCktPm91dGVyQm9y
ZGVyUmlnaHQoKSA+PSB4IC0gb3MpCiAgICAgICAgICAgICBzdGFydGNvbC0tOwotICAgICAgICAK
KwogICAgICAgICBmb3IgKDsgZW5kY29sID4gMDsgZW5kY29sLS0pIHsKICAgICAgICAgICAgIGlm
ICh0eCArIHRhYmxlKCktPmNvbHVtblBvc1tlbmRjb2wgLSAxXSA8PSB4ICsgdyArIG9zKQogICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtODkwLDEyICs4OTIsMTIgQEAgdm9pZCBSZW5kZXJUYWJs
ZVNlY3Rpb246OnBhaW50KFBhaW50SW5mbwogICAgICAgICAgICAgICAgIGMtLTsKICAgICAgICAg
ICAgIGZvciAoOyBjIDwgZW5kY29sOyBjKyspIHsKICAgICAgICAgICAgICAgICBDZWxsU3RydWN0
IGN1cnJlbnQgPSBjZWxsQXQociwgYyk7Ci0gICAgICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxs
ICpjZWxsID0gY3VycmVudC5jZWxsOworICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCog
Y2VsbCA9IGN1cnJlbnQuY2VsbDsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgLy8gQ2VsbHMgbXVzdCBhbHdheXMgcGFpbnQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkg
YXBwZWFyIHRha2luZyBpbnRvIGFjY291bnQKICAgICAgICAgICAgICAgICAvLyB0aGVpciB1cHBl
ciBsZWZ0IG9yaWdpbmF0aW5nIHJvdy9jb2x1bW4uICBGb3IgY2VsbHMgd2l0aCByb3dzcGFucywg
YXZvaWQgcmVwYWludGluZwogICAgICAgICAgICAgICAgIC8vIGlmIHdlJ3ZlIGFscmVhZHkgc2Vl
biB0aGUgY2VsbC4KLSAgICAgICAgICAgICAgICBpZiAoIWNlbGwgfHwgKHIgPiBzdGFydHJvdyAm
JiAoY2VsbEF0KHItMSwgYykuY2VsbCA9PSBjZWxsKSkpCisgICAgICAgICAgICAgICAgaWYgKCFj
ZWxsIHx8IChyID4gc3RhcnRyb3cgJiYgKGNlbGxBdChyIC0gMSwgYykuY2VsbCA9PSBjZWxsKSkp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICAgICAgaWYgKHBh
aW50UGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCB8fCBwYWludFBoYXNlID09IFBh
aW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZCkgewpAQCAtOTA5LDI2ICs5MTEsMjYgQEAgdm9p
ZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50KFBhaW50SW5mbwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbEdyb3VwID0gY29sLT5wYXJlbnQoKTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHJvdyA9IGNlbGwtPnBhcmVudCgp
OwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAvLyBDb2x1bW4g
Z3JvdXBzIGFuZCBjb2x1bW5zIGZpcnN0LgogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
Q29sdW1ucyBhbmQgY29sdW1uIGdyb3VwcyBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQgb3BhY2l0
eSwgYW5kIHRoZXkgYXJlIGJlaW5nIHBhaW50ZWQgInRvbyBsYXRlIiBpbgogICAgICAgICAgICAg
ICAgICAgICAvLyB0aGUgc3RhY2ssIHNpbmNlIHdlIGhhdmUgYWxyZWFkeSBvcGVuZWQgYSB0cmFu
c3BhcmVuY3kgbGF5ZXIgKHBvdGVudGlhbGx5KSBmb3IgdGhlIHRhYmxlIHJvdyBncm91cC4KICAg
ICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRlbGliZXJhdGVseSBpZ25vcmUgd2hl
dGhlciBvciBub3QgdGhlIGNlbGwgaGFzIGEgbGF5ZXIsIHNpbmNlIHRoZXNlIGJhY2tncm91bmRz
IHBhaW50ICJiZWhpbmQiIHRoZQogICAgICAgICAgICAgICAgICAgICAvLyBjZWxsLgotICAgICAg
ICAgICAgICAgICAgICBjZWxsLT5wYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChpLCB0eCwgdHks
IGNvbEdyb3VwKTsKLSAgICAgICAgICAgICAgICAgICAgY2VsbC0+cGFpbnRCYWNrZ3JvdW5kc0Jl
aGluZENlbGwoaSwgdHgsIHR5LCBjb2wpOwotICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgY2VsbC0+cGFpbnRCYWNrZ3JvdW5kc0JlaGluZENlbGwocGFpbnRJbmZvLCB0
eCwgdHksIGNvbEdyb3VwKTsKKyAgICAgICAgICAgICAgICAgICAgY2VsbC0+cGFpbnRCYWNrZ3Jv
dW5kc0JlaGluZENlbGwocGFpbnRJbmZvLCB0eCwgdHksIGNvbCk7CisKICAgICAgICAgICAgICAg
ICAgICAgLy8gUGFpbnQgdGhlIHJvdyBncm91cCBuZXh0LgotICAgICAgICAgICAgICAgICAgICBj
ZWxsLT5wYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChpLCB0eCwgdHksIHRoaXMpOwotICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY2VsbC0+cGFpbnRCYWNrZ3JvdW5k
c0JlaGluZENlbGwocGFpbnRJbmZvLCB0eCwgdHksIHRoaXMpOworCiAgICAgICAgICAgICAgICAg
ICAgIC8vIFBhaW50IHRoZSByb3cgbmV4dCwgYnV0IG9ubHkgaWYgaXQgZG9lc24ndCBoYXZlIGEg
bGF5ZXIuICBJZiBhIHJvdyBoYXMgYSBsYXllciwgaXQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IK
ICAgICAgICAgICAgICAgICAgICAgLy8gcGFpbnRpbmcgdGhlIHJvdyBiYWNrZ3JvdW5kIGZvciB0
aGUgY2VsbC4KICAgICAgICAgICAgICAgICAgICAgaWYgKCFyb3ctPmxheWVyKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjZWxsLT5wYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChpLCB0eCwg
dHksIHJvdyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLT5wYWludEJhY2tncm91bmRz
QmVoaW5kQ2VsbChwYWludEluZm8sIHR4LCB0eSwgcm93KTsKICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBpZiAoKCFjZWxsLT5sYXllcigpICYmICFjZWxsLT5wYXJlbnQoKS0+
bGF5ZXIoKSkgfHwgaS5waGFzZSA9PSBQYWludFBoYXNlQ29sbGFwc2VkVGFibGVCb3JkZXJzKQot
ICAgICAgICAgICAgICAgICAgICBjZWxsLT5wYWludChpLCB0eCwgdHkpOworICAgICAgICAgICAg
ICAgIGlmICgoIWNlbGwtPmxheWVyKCkgJiYgIWNlbGwtPnBhcmVudCgpLT5sYXllcigpKSB8fCBw
YWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUNvbGxhcHNlZFRhYmxlQm9yZGVycykKKyAgICAg
ICAgICAgICAgICAgICAgY2VsbC0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVT
ZWN0aW9uLmgJKHJldmlzaW9uIDE3NTE2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTk4LDEzICs5OCwxNCBAQCBwdWJsaWM6CiAg
ICAgaW50IG91dGVyQm9yZGVyTGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3V0ZXJCb3JkZXJMZWZ0
OyB9CiAgICAgaW50IG91dGVyQm9yZGVyUmlnaHQoKSBjb25zdCB7IHJldHVybiBtX291dGVyQm9y
ZGVyUmlnaHQ7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mIGksIGludCB0
eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBp
bnQgdHkpOwogCiAgICAgaW50IG51bVJvd3MoKSBjb25zdCB7IHJldHVybiBncmlkUm93czsgfQog
ICAgIGludCBudW1Db2x1bW5zKCkgY29uc3Q7Ci0gICAgaW50IGdldEJhc2VsaW5lKGludCByb3cp
IHtyZXR1cm4gZ3JpZFtyb3ddLmJhc2VMaW5lO30KKyAgICBpbnQgZ2V0QmFzZWxpbmUoaW50IHJv
dykgeyByZXR1cm4gZ3JpZFtyb3ddLmJhc2VMaW5lOyB9CiAKLSAgICB2b2lkIHNldE5lZWRDZWxs
UmVjYWxjKCkgeworICAgIHZvaWQgc2V0TmVlZENlbGxSZWNhbGMoKQorICAgIHsKICAgICAgICAg
bmVlZENlbGxSZWNhbGMgPSB0cnVlOwogICAgICAgICB0YWJsZSgpLT5zZXROZWVkU2VjdGlvblJl
Y2FsYygpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDE3NTE2
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSwxMyArNTEsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1RleHRGcmFnbWVudCgp
IGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBvcmlnaW5hbFN0cmlu
ZygpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgY29uc3QgY2hhciAqcmVuZGVyTmFtZSgpIGNv
bnN0IHsgcmV0dXJuICJSZW5kZXJUZXh0IjsgfQorICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVu
ZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJUZXh0IjsgfQogCi0gICAgdmlydHVhbCB2
b2lkIHNldFN0eWxlKFJlbmRlclN0eWxlICpzdHlsZSk7CisgICAgdmlydHVhbCB2b2lkIHNldFN0
eWxlKFJlbmRlclN0eWxlKik7CiAKLSAgICB2b2lkIGV4dHJhY3RUZXh0Qm94KElubGluZVRleHRC
b3gqIHRleHRCb3gpOwotICAgIHZvaWQgYXR0YWNoVGV4dEJveChJbmxpbmVUZXh0Qm94KiB0ZXh0
Qm94KTsKLSAgICB2b2lkIHJlbW92ZVRleHRCb3goSW5saW5lVGV4dEJveCogdGV4dEJveCk7Cisg
ICAgdm9pZCBleHRyYWN0VGV4dEJveChJbmxpbmVUZXh0Qm94Kik7CisgICAgdm9pZCBhdHRhY2hU
ZXh0Qm94KElubGluZVRleHRCb3gqKTsKKyAgICB2b2lkIHJlbW92ZVRleHRCb3goSW5saW5lVGV4
dEJveCopOwogICAgIHZvaWQgZGVsZXRlVGV4dEJveGVzKCk7CiAgICAgdmlydHVhbCB2b2lkIGRl
c3Ryb3koKTsKICAgICAKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW5s
aW5lQm94KiBjcmVhdGVJbmxpbmVCb3goYm9vbCxib29sLCBib29sIGlzT25seVJ1biA9IGZhbHNl
KTsKICAgICB2aXJ0dWFsIHZvaWQgZGlydHlMaW5lQm94ZXMoYm9vbCBmdWxsTGF5b3V0LCBib29s
IGlzUm9vdElubGluZUJveCA9IGZhbHNlKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiBpLCBpbnQgdHgsIGludCB0eSkgeyBhc3NlcnQoZmFsc2UpOyB9CisgICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KSB7IGFzc2VydChmYWxz
ZSk7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgeyBhc3NlcnQoZmFsc2UpOyB9CiAKICAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgaW50LCBpbnQsIGludCwgaW50LCBIaXRUZXN0QWN0aW9uKSB7IGFzc2VydChmYWxz
ZSk7IHJldHVybiBmYWxzZTsgfQpAQCAtMTA0LDcgKzEwNCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbWluVywgaW50JiBtYXhXLCBib29sJiBz
dHJpcEZyb250U3BhY2VzKTsKICAgICAKICAgICBib29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2Uo
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuKSBjb25zdDsKLSAgICAKKwogICAgIC8vIHJldHVy
bnMgdGhlIG1pbmltdW0geCBwb3NpdGlvbiBvZiBhbGwgcnVucyByZWxhdGl2ZSB0byB0aGUgcGFy
ZW50LgogICAgIC8vIGRlZmF1bHRzIHRvIDAuCiAgICAgaW50IG1pblhQb3MoKSBjb25zdDsKQEAg
LTExMyw3ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgeVBvcygpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBjb25zdCBGb250JiBmb250KCk7Ci0gICAgdmlydHVhbCBzaG9ydCB2ZXJ0
aWNhbFBvc2l0aW9uSGludCggYm9vbCBmaXJzdExpbmUgKSBjb25zdDsKKyAgICB2aXJ0dWFsIHNo
b3J0IHZlcnRpY2FsUG9zaXRpb25IaW50KGJvb2wgZmlyc3RMaW5lKSBjb25zdDsKIAogICAgIHZv
aWQgc2V0VGV4dChTdHJpbmdJbXBsKiwgYm9vbCBmb3JjZSA9IGZhbHNlKTsKICAgICB2b2lkIHNl
dFRleHRXaXRoT2Zmc2V0KFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
biwgYm9vbCBmb3JjZSA9IGZhbHNlKTsKQEAgLTEyMiw4ICsxMjIsOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2VsZWN0aW9uU3RhdGU7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2Vs
ZWN0aW9uU3RhdGUgcyk7CiAgICAgdmlydHVhbCBJbnRSZWN0IHNlbGVjdGlvblJlY3QoKTsKLSAg
ICB2aXJ0dWFsIEludFJlY3QgY2FyZXRSZWN0KGludCBvZmZzZXQsIEVBZmZpbml0eSBhZmZpbml0
eSwgaW50ICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsKLSAgICB2b2lkIHBvc09mQ2hhcihp
bnQgY2gsIGludCAmeCwgaW50ICZ5KTsKKyAgICB2aXJ0dWFsIEludFJlY3QgY2FyZXRSZWN0KGlu
dCBvZmZzZXQsIEVBZmZpbml0eSwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAwKTsKKyAg
ICB2b2lkIHBvc09mQ2hhcihpbnQgY2gsIGludCYgeCwgaW50JiB5KTsKIAogICAgIHZpcnR1YWwg
aW50IG1hcmdpbkxlZnQoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5tYXJnaW5MZWZ0KCkuY2Fs
Y01pblZhbHVlKDApOyB9CiAgICAgdmlydHVhbCBpbnQgbWFyZ2luUmlnaHQoKSBjb25zdCB7IHJl
dHVybiBzdHlsZSgpLT5tYXJnaW5SaWdodCgpLmNhbGNNaW5WYWx1ZSgwKTsgfQpAQCAtMTMyLDE1
ICsxMzIsMTUgQEAgcHVibGljOgogCiAgICAgY29uc3QgRm9udCogZm9udChib29sIGZpcnN0TGlu
ZSkgY29uc3Q7CiAKLSAgICBUZXh0ICplbGVtZW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8VGV4dCo+KFJlbmRlck9iamVjdDo6ZWxlbWVudCgpKTsgfQorICAgIFRleHQqIGVsZW1lbnQo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUZXh0Kj4oUmVuZGVyT2JqZWN0OjplbGVtZW50
KCkpOyB9CiAKICAgICBJbmxpbmVUZXh0Qm94KiBmaXJzdFRleHRCb3goKSBjb25zdCB7IHJldHVy
biBtX2ZpcnN0VGV4dEJveDsgfQogICAgIElubGluZVRleHRCb3gqIGxhc3RUZXh0Qm94KCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0VGV4dEJveDsgfQotICAgIAotICAgIHZpcnR1YWwgSW5saW5lQm94
ICppbmxpbmVCb3goaW50IG9mZnNldCwgRUFmZmluaXR5IGFmZmluaXR5ID0gVVBTVFJFQU0pOwor
CisgICAgdmlydHVhbCBJbmxpbmVCb3gqIGlubGluZUJveChpbnQgb2Zmc2V0LCBFQWZmaW5pdHkg
PSBVUFNUUkVBTSk7CiAKICAgICBpbnQgd2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udCosIGludCBz
dGFydCwgaW50IGxlbiwgaW50IHRhYldpZHRoLCBpbnQgeHBvcykgY29uc3Q7Ci0gICAgYm9vbCBz
aG91bGRVc2VNb25vc3BhY2VDYWNoZShjb25zdCBGb250ICopIGNvbnN0OworICAgIGJvb2wgc2hv
dWxkVXNlTW9ub3NwYWNlQ2FjaGUoY29uc3QgRm9udCopIGNvbnN0OwogICAgIHZvaWQgY2FjaGVX
aWR0aHMoKTsKICAgICBib29sIGFsbEFzY2lpKCkgY29uc3Q7CiAKQEAgLTE1MywyNyArMTUzLDI3
IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGNvbnRhaW5zUmV2ZXJzZWRUZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9jb250YWluc1JldmVyc2VkVGV4dDsgfQogICAgIAotcHVibGljOgotICAgIElu
bGluZVRleHRCb3ggKiBmaW5kTmV4dElubGluZVRleHRCb3goIGludCBvZmZzZXQsIGludCAmcG9z
ICkgY29uc3Q7CisgICAgSW5saW5lVGV4dEJveCogZmluZE5leHRJbmxpbmVUZXh0Qm94KGludCBv
ZmZzZXQsIGludCYgcG9zKSBjb25zdDsKIAotcHJvdGVjdGVkOiAvLyBtZW1iZXJzCitwcm90ZWN0
ZWQ6CisgICAgLy8gbWVtYmVycwogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBzdHI7Ci0gICAgCisK
ICAgICBJbmxpbmVUZXh0Qm94KiBtX2ZpcnN0VGV4dEJveDsKICAgICBJbmxpbmVUZXh0Qm94KiBt
X2xhc3RUZXh0Qm94OwotICAgIAorCiAgICAgaW50IG1fbWluV2lkdGg7CiAgICAgaW50IG1fbWF4
V2lkdGg7CiAgICAgaW50IG1fYmVnaW5NaW5XaWR0aDsKICAgICBpbnQgbV9lbmRNaW5XaWR0aDsK
LSAgICAKKwogICAgIFNlbGVjdGlvblN0YXRlIG1fc2VsZWN0aW9uU3RhdGUgOiAzIDsKICAgICBi
b29sIG1faGFzQnJlYWthYmxlQ2hhciA6IDE7IC8vIFdoZXRoZXIgb3Igbm90IHdlIGNhbiBiZSBi
cm9rZW4gaW50byBtdWx0aXBsZSBsaW5lcy4KICAgICBib29sIG1faGFzQnJlYWsgOiAxOyAvLyBX
aGV0aGVyIG9yIG5vdCB3ZSBoYXZlIGEgaGFyZCBicmVhayAoZS5nLiwgPHByZT4gd2l0aCAnXG4n
KS4KICAgICBib29sIG1faGFzVGFiIDogMTsgLy8gV2hldGhlciBvciBub3Qgd2UgaGF2ZSBhIHZh
cmlhYmxlIHdpZHRoIHRhYiBjaGFyYWN0ZXIgKGUuZy4sIDxwcmU+IHdpdGggJ1x0JykuCiAgICAg
Ym9vbCBtX2hhc0JlZ2luV1MgOiAxOyAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBiZWdpbiB3aXRoIFdT
IChvbmx5IHRydWUgaWYgd2UgYXJlbid0IHByZSkKICAgICBib29sIG1faGFzRW5kV1MgOiAxOyAv
LyBXaGV0aGVyIG9yIG5vdCB3ZSBlbmQgd2l0aCBXUyAob25seSB0cnVlIGlmIHdlIGFyZW4ndCBw
cmUpCi0gICAgCisKICAgICBib29sIG1fbGluZXNEaXJ0eSA6IDE7IC8vIFRoaXMgYml0IGluZGlj
YXRlcyB0aGF0IHRoZSB0ZXh0IHJ1biBoYXMgYWxyZWFkeSBkaXJ0aWVkIHNwZWNpZmljCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBsaW5lIGJveGVzLCBhbmQgdGhpcyBoaW50IHdpbGwg
ZW5hYmxlIGxheW91dElubGluZUNoaWxkcmVuIHRvIGF2b2lkCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBqdXN0IGRpcnR5aW5nIGV2ZXJ5dGhpbmcgd2hlbiBjaGFyYWN0ZXIgZGF0YSBp
cyBtb2RpZmllZCAoZS5nLiwgYXBwZW5kZWQvaW5zZXJ0ZWQKQEAgLTE4OCw2ICsxODgsNiBAQCBw
cm90ZWN0ZWQ6IC8vIG1lbWJlcnMKIAogVUJyZWFrSXRlcmF0b3IqIGNoYXJhY3RlckJyZWFrSXRl
cmF0b3IoY29uc3QgU3RyaW5nSW1wbCopOwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
LSNlbmRpZgorI2VuZGlmIC8vIFJlbmRlclRleHRfaApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lLmNwcAkocmV2aXNpb24gMTc1MTYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDMxICs3NywzMSBAQCB2b2lkIFJlbmRlclRoZW1l
OjphZGp1c3RTdHlsZShDU1NTdHlsZVNlCiAgICAgfQogfQogCi1ib29sIFJlbmRlclRoZW1lOjpw
YWludChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnQoUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByKQogewogICAgIC8vIElmIHBhaW50aW5nIGlzIGRpc2FibGVkLCBidXQgd2UgYXJlbid0IHVw
ZGF0aW5nIGNvbnRyb2wgdGludHMsIHRoZW4ganVzdCBiYWlsLgogICAgIC8vIElmIHdlIGFyZSB1
cGRhdGluZyBjb250cm9sIHRpbnRzLCBqdXN0IHNjaGVkdWxlIGEgcmVwYWludCBpZiB0aGUgdGhl
bWUgc3VwcG9ydHMgdGludGluZwogICAgIC8vIGZvciB0aGF0IGNvbnRyb2wuCi0gICAgaWYgKGku
cC0+dXBkYXRpbmdDb250cm9sVGludHMoKSkgeworICAgIGlmIChwYWludEluZm8uY29udGV4dC0+
dXBkYXRpbmdDb250cm9sVGludHMoKSkgewogICAgICAgICBpZiAoY29udHJvbFN1cHBvcnRzVGlu
dHMobykpCiAgICAgICAgICAgICBvLT5yZXBhaW50KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9Ci0gICAgaWYgKGkucC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIGlmIChwYWludElu
Zm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIAorCiAgICAgLy8gQ2FsbCB0aGUgYXBwcm9wcmlhdGUgcGFpbnQgbWV0aG9kIGJhc2Vk
IG9mZiB0aGUgYXBwZWFyYW5jZSB2YWx1ZS4KICAgICBzd2l0Y2ggKG8tPnN0eWxlKCktPmFwcGVh
cmFuY2UoKSkgewogICAgICAgICBjYXNlIENoZWNrYm94QXBwZWFyYW5jZToKLSAgICAgICAgICAg
IHJldHVybiBwYWludENoZWNrYm94KG8sIGksIHIpOworICAgICAgICAgICAgcmV0dXJuIHBhaW50
Q2hlY2tib3gobywgcGFpbnRJbmZvLCByKTsKICAgICAgICAgY2FzZSBSYWRpb0FwcGVhcmFuY2U6
Ci0gICAgICAgICAgICByZXR1cm4gcGFpbnRSYWRpbyhvLCBpLCByKTsKKyAgICAgICAgICAgIHJl
dHVybiBwYWludFJhZGlvKG8sIHBhaW50SW5mbywgcik7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRv
bkFwcGVhcmFuY2U6CiAgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uQXBwZWFyYW5jZToKICAgICAg
ICAgY2FzZSBCdXR0b25BcHBlYXJhbmNlOgotICAgICAgICAgICAgcmV0dXJuIHBhaW50QnV0dG9u
KG8sIGksIHIpOworICAgICAgICAgICAgcmV0dXJuIHBhaW50QnV0dG9uKG8sIHBhaW50SW5mbywg
cik7CiAgICAgICAgIGNhc2UgTWVudWxpc3RBcHBlYXJhbmNlOgotICAgICAgICAgICAgcmV0dXJu
IHBhaW50TWVudUxpc3QobywgaSwgcik7CisgICAgICAgICAgICByZXR1cm4gcGFpbnRNZW51TGlz
dChvLCBwYWludEluZm8sIHIpOwogICAgICAgICBjYXNlIE1lbnVsaXN0QnV0dG9uQXBwZWFyYW5j
ZToKICAgICAgICAgY2FzZSBUZXh0RmllbGRBcHBlYXJhbmNlOgogICAgICAgICBjYXNlIFRleHRB
cmVhQXBwZWFyYW5jZToKQEAgLTExMCwyMiArMTEwLDIyIEBAIGJvb2wgUmVuZGVyVGhlbWU6OnBh
aW50KFJlbmRlck9iamVjdCogbywKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiB0cnVlOyAvLyBXZSBkb24ndCBzdXBwb3J0IHRo
ZSBhcHBlYXJhbmNlLCBzbyBsZXQgdGhlIG5vcm1hbCBiYWNrZ3JvdW5kL2JvcmRlciBwYWludC4K
IH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnRCb3JkZXJPbmx5KFJlbmRlck9iamVjdCogbywg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCitib29s
IFJlbmRlclRoZW1lOjpwYWludEJvcmRlck9ubHkoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAg
IGlmIChpLnAtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQt
PnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKKwog
ICAgIC8vIENhbGwgdGhlIGFwcHJvcHJpYXRlIHBhaW50IG1ldGhvZCBiYXNlZCBvZmYgdGhlIGFw
cGVhcmFuY2UgdmFsdWUuCiAgICAgc3dpdGNoIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkpIHsK
ICAgICAgICAgY2FzZSBUZXh0RmllbGRBcHBlYXJhbmNlOgotICAgICAgICAgICAgcmV0dXJuIHBh
aW50VGV4dEZpZWxkKG8sIGksIHIpOworICAgICAgICAgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxk
KG8sIHBhaW50SW5mbywgcik7CiAgICAgICAgIGNhc2UgTGlzdGJveEFwcGVhcmFuY2U6CiAgICAg
ICAgIGNhc2UgVGV4dEFyZWFBcHBlYXJhbmNlOgotICAgICAgICAgICAgcmV0dXJuIHBhaW50VGV4
dEFyZWEobywgaSwgcik7CisgICAgICAgICAgICByZXR1cm4gcGFpbnRUZXh0QXJlYShvLCBwYWlu
dEluZm8sIHIpOwogICAgICAgICBjYXNlIE1lbnVsaXN0QnV0dG9uQXBwZWFyYW5jZToKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBjYXNlIENoZWNrYm94QXBwZWFyYW5jZToKQEAg
LTEzNywxOSArMTM3LDE5IEBAIGJvb2wgUmVuZGVyVGhlbWU6OnBhaW50Qm9yZGVyT25seShSZW5k
ZXIKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAKKwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnREZWNvcmF0aW9u
cyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZTo6cGFpbnREZWNvcmF0aW9ucyhSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHIpCiB7Ci0gICAgaWYgKGkucC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIGlm
IChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIAorCiAgICAgLy8gQ2FsbCB0aGUgYXBwcm9wcmlhdGUgcGFpbnQgbWV0
aG9kIGJhc2VkIG9mZiB0aGUgYXBwZWFyYW5jZSB2YWx1ZS4KICAgICBzd2l0Y2ggKG8tPnN0eWxl
KCktPmFwcGVhcmFuY2UoKSkgewogICAgICAgICBjYXNlIE1lbnVsaXN0QnV0dG9uQXBwZWFyYW5j
ZToKLSAgICAgICAgICAgIHJldHVybiBwYWludE1lbnVMaXN0QnV0dG9uKG8sIGksIHIpOworICAg
ICAgICAgICAgcmV0dXJuIHBhaW50TWVudUxpc3RCdXR0b24obywgcGFpbnRJbmZvLCByKTsKICAg
ICAgICAgY2FzZSBUZXh0RmllbGRBcHBlYXJhbmNlOgogICAgICAgICBjYXNlIFRleHRBcmVhQXBw
ZWFyYW5jZToKICAgICAgICAgY2FzZSBMaXN0Ym94QXBwZWFyYW5jZToKQEAgLTE2Miw3ICsxNjIs
NyBAQCBib29sIFJlbmRlclRoZW1lOjpwYWludERlY29yYXRpb25zKFJlbmRlCiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkocmV2aXNpb24gMTc1MTYpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw4
ICsyMCw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgUkVOREVSX1RIRU1FX0gKLSNkZWZpbmUgUkVO
REVSX1RIRU1FX0gKKyNpZm5kZWYgUmVuZGVyVGhlbWVfaAorI2RlZmluZSBSZW5kZXJUaGVtZV9o
CiAKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKIApAQCAtMzUsNjMgKzM1LDYyIEBAIGVudW0g
Q29udHJvbFN0YXRlIHsgSG92ZXJTdGF0ZSwgUHJlc3NlZFMKIAogY2xhc3MgUmVuZGVyVGhlbWUg
ewogcHVibGljOgotICAgIFJlbmRlclRoZW1lKCkge30KLSAgICB2aXJ0dWFsIH5SZW5kZXJUaGVt
ZSgpIHt9CisgICAgUmVuZGVyVGhlbWUoKSB7IH0KKyAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZSgp
IHsgfQogCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIHN0eWxlIGhhcyBi
ZWVuIGNvbXB1dGVkIGZvciBhbiBlbGVtZW50IGFuZCB0aGUgYXBwZWFyYW5jZQogICAgIC8vIHBy
b3BlcnR5IGhhcyBiZWVuIHNldCB0byBhIHZhbHVlIG90aGVyIHRoYW4gIm5vbmUiLiAgVGhlIHRo
ZW1lIHNob3VsZCBtYXAgaW4gYWxsIG9mIHRoZSBhcHByb3ByaWF0ZQogICAgIC8vIG1ldHJpY3Mg
YW5kIGRlZmF1bHRzIGdpdmVuIHRoZSBjb250ZW50cyBvZiB0aGUgc3R5bGUuICBUaGlzIGluY2x1
ZGVzIHNvcGhpc3RpY2F0ZWQgb3BlcmF0aW9ucyBsaWtlCiAgICAgLy8gc2VsZWN0aW9uIG9mIGNv
bnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIGZvbnQsIHRoZSBkaXNhYmxpbmcgb2YgYXBwZWFyYW5j
ZSB3aGVuIGNlcnRhaW4gb3RoZXIgcHJvcGVydGllcyBsaWtlCiAgICAgLy8gImJvcmRlciIgYXJl
IHNldCwgb3IgaWYgdGhlIGFwcGVhcmFuY2UgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgdGhlbWUu
Ci0gICAgdm9pZCBhZGp1c3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KiwgCi0gICAgICAgICAgICAgICAgICAgIGJvb2wgVUFIYXNBcHBlYXJhbmNlLCBjb25z
dCBCb3JkZXJEYXRhJiwgY29uc3QgQmFja2dyb3VuZExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tn
cm91bmRDb2xvcik7Ci0gICAgCisgICAgdm9pZCBhZGp1c3RTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KiwgIGJvb2wgVUFIYXNBcHBlYXJhbmNlLCAKKyAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBCYWNrZ3JvdW5kTGF5ZXIm
LCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKTsKKwogICAgIC8vIFRoaXMgbWV0aG9kIGlz
IGNhbGxlZCB0byBwYWludCB0aGUgd2lkZ2V0IGFzIGEgYmFja2dyb3VuZCBvZiB0aGUgUmVuZGVy
T2JqZWN0LiAgQSB3aWRnZXQncyBmb3JlZ3JvdW5kLCBlLmcuLCB0aGUKICAgICAvLyB0ZXh0IG9m
IGEgYnV0dG9uLCBpcyBhbHdheXMgcmVuZGVyZWQgYnkgdGhlIGVuZ2luZSBpdHNlbGYuICBUaGUg
Ym9vbGVhbiByZXR1cm4gdmFsdWUgaW5kaWNhdGVzCiAgICAgLy8gd2hldGhlciB0aGUgQ1NTIGJv
cmRlci9iYWNrZ3JvdW5kIHNob3VsZCBhbHNvIGJlIHBhaW50ZWQuCi0gICAgYm9vbCBwYWludChS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByKTsKLSAgICBib29sIHBhaW50Qm9yZGVyT25seShSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKLSAgICBi
b29sIHBhaW50RGVjb3JhdGlvbnMoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7CisgICAgYm9vbCBwYWludChSZW5kZXJP
YmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICBib29sIHBhaW50Qm9yZGVyT25seShSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICBib29sIHBhaW50RGVjb3JhdGlv
bnMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CiAKICAgICAvLyBUaGUgcmVtYWluaW5nIG1ldGhvZHMgc2hvdWxkIGJlIGltcGxl
bWVudGVkIGJ5IHRoZSBwbGF0Zm9ybS1zcGVjaWZpYyBwb3J0aW9uIG9mIHRoZSB0aGVtZSwgZS5n
LiwKICAgICAvLyBSZW5kZXJUaGVtZU1hYy5jcHAgZm9yIE1hYyBPUyBYLgotICAgIAorCiAgICAg
Ly8gQSBtZXRob2QgdG8gb2J0YWluIHRoZSBiYXNlbGluZSBwb3NpdGlvbiBmb3IgYSAibGVhZiIg
Y29udHJvbC4gIFRoaXMgd2lsbCBvbmx5IGJlIHVzZWQgaWYgYSBiYXNlbGluZQogICAgIC8vIHBv
c2l0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyBjaGlsZCBjb250ZW50LiBD
aGVja2JveGVzIGFuZCByYWRpbyBidXR0b25zIGFyZSBleGFtcGxlcyBvZgogICAgIC8vIGNvbnRy
b2xzIHRoYXQgbmVlZCB0byBkbyB0aGlzLgotICAgIHZpcnR1YWwgc2hvcnQgYmFzZWxpbmVQb3Np
dGlvbihjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0OworICAgIHZpcnR1YWwgc2hvcnQgYmFz
ZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKIAogICAgIC8vIEEgbWV0
aG9kIGZvciBhc2tpbmcgaWYgYSBjb250cm9sIGlzIGEgY29udGFpbmVyIG9yIG5vdC4gIExlYWYg
Y29udHJvbHMgaGF2ZSB0byBoYXZlIHNvbWUgc3BlY2lhbCBiZWhhdmlvciAobGlrZQogICAgIC8v
IHRoZSBiYXNlbGluZSBwb3NpdGlvbiBBUEkgYWJvdmUpLgotICAgIHZpcnR1YWwgYm9vbCBpc0Nv
bnRyb2xDb250YWluZXIoRUFwcGVhcmFuY2UgYXBwZWFyYW5jZSkgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGlzQ29udHJvbENvbnRhaW5lcihFQXBwZWFyYW5jZSkgY29uc3Q7CiAKICAgICAvLyBB
IG1ldGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3
aW5kb3cgaGFzIGZvY3VzIG9yIG5vdC4KLSAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRz
VGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIGNvbnRy
b2wgaGFzIGJlZW4gc3R5bGVkIGVub3VnaCBieSB0aGUgYXV0aG9yIHRvIGRpc2FibGUgdGhlIG5h
dGl2ZSBhcHBlYXJhbmNlLgotICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFja2dyb3VuZExheWVyJiBiYWNrZ3JvdW5k
LCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9yZGVyRGF0YSYsIGNv
bnN0IEJhY2tncm91bmRMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0
OwogCiAgICAgLy8gQSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcgaWYgYW55IGNvbnRyb2wgdGludGlu
ZyBpcyBzdXBwb3J0ZWQgYXQgYWxsLgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xU
aW50cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBTb21lIGNvbnRyb2xzIG1h
eSBzcGlsbCBvdXQgb2YgdGhlaXIgY29udGFpbmVycyAoZS5nLiwgdGhlIGNoZWNrIG9uIGFuIE9T
IFggY2hlY2tib3gpLiAgV2hlbiB0aGVzZSBjb250cm9scyByZXBhaW50LAogICAgIC8vIHRoZSB0
aGVtZSBuZWVkcyB0byBjb21tdW5pY2F0ZSB0aGlzIGluZmxhdGVkIHJlY3QgdG8gdGhlIGVuZ2lu
ZSBzbyB0aGF0IGl0IGNhbiBpbnZhbGlkYXRlIHRoZSB3aG9sZSBjb250cm9sLgotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIG8sIEludFJlY3Qm
IHIpIHsgfQotICAgIAorICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBS
ZW5kZXJPYmplY3QqLCBJbnRSZWN0JikgeyB9CisKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxs
ZWQgd2hlbmV2ZXIgYSByZWxldmFudCBzdGF0ZSBjaGFuZ2VzIG9uIGEgcGFydGljdWxhciB0aGVt
ZWQgb2JqZWN0LCBlLmcuLCB0aGUgbW91c2UgYmVjb21lcyBwcmVzc2VkCiAgICAgLy8gb3IgYSBj
b250cm9sIGJlY29tZXMgZGlzYWJsZWQuCi0gICAgdmlydHVhbCBib29sIHN0YXRlQ2hhbmdlZChS
ZW5kZXJPYmplY3QqIG8sIENvbnRyb2xTdGF0ZSBzdGF0ZSkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIHN0YXRlQ2hhbmdlZChSZW5kZXJPYmplY3QqLCBDb250cm9sU3RhdGUpIGNvbnN0OwogCiAg
ICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSB0aGVtZSBjaGFuZ2VzIG9u
IHRoZSBzeXN0ZW0gaW4gb3JkZXIgdG8gZmx1c2ggY2FjaGVkIHJlc291cmNlcyBmcm9tIHRoZQog
ICAgIC8vIG9sZCB0aGVtZS4KLSAgICB2aXJ0dWFsIHZvaWQgdGhlbWVDaGFuZ2VkKCkge307Cisg
ICAgdmlydHVhbCB2b2lkIHRoZW1lQ2hhbmdlZCgpIHsgfQogCiAgICAgLy8gQSBtZXRob2QgYXNr
aW5nIGlmIHRoZSB0aGVtZSBpcyBhYmxlIHRvIGRyYXcgdGhlIGZvY3VzIHJpbmcuCi0gICAgdmly
dHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3Q7Ci0gICAgCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRl
clN0eWxlKikgY29uc3Q7CisKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3Mg
Y29udHJvbHMgYWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25z
dCBSZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICAvLyBUaGUgc2Vs
ZWN0aW9uIGNvbG9yLgogICAgIENvbG9yIGFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
IGNvbnN0OwpAQCAtMTAyLDE0ICsxMDEsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ29sb3Ig
cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OwogICAgIHZp
cnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25z
dDsKICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IoKSBjb25zdDsKLSAgICAKKwogICAgIC8vIExpc3QgQm94IHNlbGVjdGlvbiBjb2xvcgog
ICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
IGNvbnN0OwogICAgIHZpcnR1YWwgQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91
bmRDb2xvcigpIGNvbnN0OwogICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CiAgICAgdmlydHVhbCBDb2xvciBpbmFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKIAotCiAgICAgLy8gU3lzdGVt
IGZvbnRzLgogICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNj
cmlwdGlvbiYpIGNvbnN0ID0gMDsKIApAQCAtMTE3LDQ0ICsxMTUsNDQgQEAgcHVibGljOgogCiBw
cm90ZWN0ZWQ6CiAgICAgLy8gTWV0aG9kcyBmb3Igc3RhdGUgcXVlcnlpbmcKLSAgICBib29sIGlz
Q2hlY2tlZChjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0OwotICAgIGJvb2wgaXNJbmRldGVy
bWluYXRlKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3Q7Ci0gICAgYm9vbCBpc0VuYWJsZWQo
Y29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdDsKLSAgICBib29sIGlzRm9jdXNlZChjb25zdCBS
ZW5kZXJPYmplY3QqIG8pIGNvbnN0OwotICAgIGJvb2wgaXNQcmVzc2VkKGNvbnN0IFJlbmRlck9i
amVjdCogbykgY29uc3Q7Ci0gICAgYm9vbCBpc0hvdmVyZWQoY29uc3QgUmVuZGVyT2JqZWN0KiBv
KSBjb25zdDsKLSAgICBib29sIGlzUmVhZE9ubHlDb250cm9sKGNvbnN0IFJlbmRlck9iamVjdCog
bykgY29uc3Q7CisgICAgYm9vbCBpc0NoZWNrZWQoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7
CisgICAgYm9vbCBpc0luZGV0ZXJtaW5hdGUoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7Cisg
ICAgYm9vbCBpc0VuYWJsZWQoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CisgICAgYm9vbCBp
c0ZvY3VzZWQoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CisgICAgYm9vbCBpc1ByZXNzZWQo
Y29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CisgICAgYm9vbCBpc0hvdmVyZWQoY29uc3QgUmVu
ZGVyT2JqZWN0KikgY29uc3Q7CisgICAgYm9vbCBpc1JlYWRPbmx5Q29udHJvbChjb25zdCBSZW5k
ZXJPYmplY3QqKSBjb25zdDsKIAogICAgIC8vIE1ldGhvZHMgZm9yIGVhY2ggYXBwZWFyYW5jZSB2
YWx1ZS4KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0Q2hlY2tib3hTdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKSB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0IHt9OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RDaGVja2JveFN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHNl
dENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0IHsgfQogICAgIAotICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RSYWRpb1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFJh
ZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmFk
aW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Qge307CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFJhZGlvU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3QgeyB9
CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKSB7IHJldHVybiB0cnVlOyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdCB7
fTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1
dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHNldEJ1dHRvblNp
emUoUmVuZGVyU3R5bGUqKSBjb25zdCB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0
RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KiBlKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50
UmVjdCYgcikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0Rmll
bGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0K
IAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
IHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFy
ZWEoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVM
aXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCogZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSB7IHJldHVybiB0cnVlOyB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdDsKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKSB7IHJldHVybiB0cnVl
OyB9CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVT
ZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIHRydWU7IH0KIH07CiAKIC8vIEZ1
bmN0aW9uIHRvIG9idGFpbiB0aGUgdGhlbWUuICBUaGlzIGlzIGltcGxlbWVudGVkIGluIHlvdXIg
cGxhdGZvcm0tc3BlY2lmaWMgdGhlbWUgaW1wbGVtZW50YXRpb24gdG8gaGFuZAogLy8gYmFjayB0
aGUgYXBwcm9wcmlhdGUgcGxhdGZvcm0gdGhlbWUuCiBSZW5kZXJUaGVtZSogdGhlbWUoKTsKIAot
fQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKKyNlbmRpZiAvLyBSZW5kZXJUaGVt
ZV9oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkocmV2aXNpb24gMTc1MTYp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzM4LDcgKzMzOCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldEZvbnRGcm9tQ29udHJv
bFMKICAgICAgICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICAvLyBEZXRlcm1pbmUgdGhlIHdpZHRoIGFuZCBo
ZWlnaHQgbmVlZGVkIGZvciB0aGUgY29udHJvbCBhbmQgcHJlcGFyZSB0aGUgY2VsbCBmb3IgcGFp
bnRpbmcuCiAgICAgc2V0Q2hlY2tib3hDZWxsU3RhdGUobywgcik7CkBAIC0zOTgsNyArMzk4LDcg
QEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0Q2hlY2tib3hTaXplKFJlbgogICAgIHNldFNpemVG
cm9tRm9udChzdHlsZSwgY2hlY2tib3hTaXplcygpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRSYWRp
byhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYgcikKIHsKICAgICAvLyBEZXRlcm1pbmUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgbmVl
ZGVkIGZvciB0aGUgY29udHJvbCBhbmQgcHJlcGFyZSB0aGUgY2VsbCBmb3IgcGFpbnRpbmcuCiAg
ICAgc2V0UmFkaW9DZWxsU3RhdGUobywgcik7CkBAIC01NzEsMTEgKzU3MSwxMSBAQCB2b2lkIFJl
bmRlclRoZW1lTWFjOjpzZXRCdXR0b25DZWxsU3RhdGUoCiAKIGJvb2wgUmVuZGVyVGhlbWVNYWM6
OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBMb2NhbEN1cnJlbnRHcmFw
aGljc0NvbnRleHQgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0KHBhaW50SW5mby5wKTsKKyAg
ICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0
KHBhaW50SW5mby5jb250ZXh0KTsKIAogICAgIC8vIERldGVybWluZSB0aGUgd2lkdGggYW5kIGhl
aWdodCBuZWVkZWQgZm9yIHRoZSBjb250cm9sIGFuZCBwcmVwYXJlIHRoZSBjZWxsIGZvciBwYWlu
dGluZy4KICAgICBzZXRCdXR0b25DZWxsU3RhdGUobywgcik7Ci0gICAgCisKICAgICAvLyBXZSBp
bmZsYXRlIHRoZSByZWN0IGFzIG5lZWRlZCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGluY2x1ZGVk
IGluIHRoZSBjZWxsIHRvIGFjY29tbW9kYXRlIHRoZSBidXR0b24KICAgICAvLyBzaGFkb3cuICBX
ZSBkb24ndCBjb25zaWRlciB0aGlzIHBhcnQgb2YgdGhlIGJvdW5kcyBvZiB0aGUgY29udHJvbCBp
biBXZWJLaXQuCiAgICAgSW50U2l6ZSBzaXplID0gYnV0dG9uU2l6ZXMoKVtbYnV0dG9uIGNvbnRy
b2xTaXplXV07CkBAIC01ODcsNyArNTg3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRC
dXR0b24oUmVuZGVyTwogICAgICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldFkoaW5mbGF0ZWRSZWN0
LnkoKSArIChpbmZsYXRlZFJlY3QuaGVpZ2h0KCkgLSBzaXplLmhlaWdodCgpKSAvIDIpOwogICAg
ICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldEhlaWdodChzaXplLmhlaWdodCgpKTsKICAgICAgICAg
fQotICAgICAgICAKKwogICAgICAgICAvLyBOb3cgaW5mbGF0ZSBpdCB0byBhY2NvdW50IGZvciB0
aGUgc2hhZG93LgogICAgICAgICBpbmZsYXRlZFJlY3QgPSBpbmZsYXRlUmVjdChpbmZsYXRlZFJl
Y3QsIHNpemUsIGJ1dHRvbk1hcmdpbnMoKSk7CiAgICAgfQpAQCAtNjAwLDcgKzYwMCw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50QnV0dG9uKFJlbmRlck8KIAogYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIExvY2FsQ3Vy
cmVudEdyYXBoaWNzQ29udGV4dCBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQocGFpbnRJbmZv
LnApOworICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBMb2NhbEN1cnJlbnRHcmFwaGlj
c0NvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwogICAgIHdrRHJhd0JlemVsZWRUZXh0RmllbGRD
ZWxsKHIsIGlzRW5hYmxlZChvKSAmJiAhaXNSZWFkT25seUNvbnRyb2wobykpOwogICAgIHJldHVy
biBmYWxzZTsKIH0KQEAgLTYxMSw3ICs2MTEsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1
c3RUZXh0RmllbGRTdHlsCiAKIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEFyZWEoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByKQogewotICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBMb2Nh
bEN1cnJlbnRHcmFwaGljc0NvbnRleHQocGFpbnRJbmZvLnApOworICAgIExvY2FsQ3VycmVudEdy
YXBoaWNzQ29udGV4dCBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQocGFpbnRJbmZvLmNvbnRl
eHQpOwogICAgIHdrRHJhd0JlemVsZWRUZXh0QXJlYShyLCBpc0VuYWJsZWQobykgJiYgIWlzUmVh
ZE9ubHlDb250cm9sKG8pKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC02NTksMTQgKzY1OSwx
NCBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRQb3B1cFBhZGRpbmdGcm9tCiBib29sIFJlbmRl
clRoZW1lTWFjOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIHNldFBvcHVwQnV0dG9u
Q2VsbFN0YXRlKG8sIHIpOwotICAgIAorCiAgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSByOwog
ICAgIEludFNpemUgc2l6ZSA9IHBvcHVwQnV0dG9uU2l6ZXMoKVtbcG9wdXBCdXR0b24gY29udHJv
bFNpemVdXTsKICAgICBzaXplLnNldFdpZHRoKHIud2lkdGgoKSk7CiAKICAgICAvLyBOb3cgaW5m
bGF0ZSBpdCB0byBhY2NvdW50IGZvciB0aGUgc2hhZG93LgogICAgIGluZmxhdGVkUmVjdCA9IGlu
ZmxhdGVSZWN0KGluZmxhdGVkUmVjdCwgc2l6ZSwgcG9wdXBCdXR0b25NYXJnaW5zKCkpOwotICAg
ICAgICAKKwogICAgIFtwb3B1cEJ1dHRvbiBkcmF3V2l0aEZyYW1lOmluZmxhdGVkUmVjdCBpblZp
ZXc6by0+dmlldygpLT5mcmFtZVZpZXcoKS0+Z2V0RG9jdW1lbnRWaWV3KCldOwogICAgIFtwb3B1
cEJ1dHRvbiBzZXRDb250cm9sVmlldzpuaWxdOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTcxNCwx
MjQgKzcxNCwxMjYgQEAgc3RhdGljIHZvaWQgTWFpbkdyYWRpZW50SW50ZXJwb2xhdGUoIHZvaQog
ICAgICAgICBvdXREYXRhW2ldID0gKCAxLjAgLSBhICkgKiBkYXJrW2ldICsgYSAqIGxpZ2h0W2ld
OwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRz
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHIpCit2b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uR3Jh
ZGllbnRzKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9
IGkucC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgICAgIAotICAgIGkucC0+c2F2ZSgpOworICAg
IENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpOworCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKIAogICAgIGludCByYWRpdXMg
PSBvLT5zdHlsZSgpLT5ib3JkZXJUb3BMZWZ0UmFkaXVzKCkud2lkdGgoKTsKLSAgICAKKwogICAg
IENHQ29sb3JTcGFjZVJlZiBjc3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsg
ICAgCiAKICAgICBGbG9hdFJlY3QgdG9wR3JhZGllbnQoci54KCksIHIueSgpLCByLndpZHRoKCks
IHIuaGVpZ2h0KCkgLyAyLjApOwogICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIHRvcENh
bGxiYWNrcyA9IHsgMCwgVG9wR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVMTCB9OwotICAgIENHRnVu
Y3Rpb25SZWYgdG9wRnVuY3Rpb24gPSBDR0Z1bmN0aW9uQ3JlYXRlKCBOVUxMLCAxLCBOVUxMLCA0
LCBOVUxMLCAmdG9wQ2FsbGJhY2tzICk7Ci0gICAgQ0dTaGFkaW5nUmVmIHRvcFNoYWRpbmcgPSBD
R1NoYWRpbmdDcmVhdGVBeGlhbCggY3NwYWNlLCBDR1BvaW50TWFrZSh0b3BHcmFkaWVudC54KCks
ICB0b3BHcmFkaWVudC55KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDR1BvaW50
TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50LmJvdHRvbSgpKSwgdG9wRnVuY3Rpb24s
IGZhbHNlLCBmYWxzZSApOworICAgIENHRnVuY3Rpb25SZWYgdG9wRnVuY3Rpb24gPSBDR0Z1bmN0
aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZ0b3BDYWxsYmFja3MpOworICAgIENH
U2hhZGluZ1JlZiB0b3BTaGFkaW5nID0gQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1Bv
aW50TWFrZSh0b3BHcmFkaWVudC54KCksIHRvcEdyYWRpZW50LnkoKSksIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dQb2ludE1ha2UodG9wR3Jh
ZGllbnQueCgpLCB0b3BHcmFkaWVudC5ib3R0b20oKSksIHRvcEZ1bmN0aW9uLCBmYWxzZSwgZmFs
c2UpOwogCiAgICAgRmxvYXRSZWN0IGJvdHRvbUdyYWRpZW50KHIueCgpICsgcmFkaXVzLCByLnko
KSArIHIuaGVpZ2h0KCkgLyAyLjAsIHIud2lkdGgoKSAtIDIgKiByYWRpdXMsIHIuaGVpZ2h0KCkg
LyAyLjApOwogICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIGJvdHRvbUNhbGxiYWNrcyA9
IHsgMCwgQm90dG9tR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVMTCB9OwotICAgIENHRnVuY3Rpb25S
ZWYgYm90dG9tRnVuY3Rpb24gPSBDR0Z1bmN0aW9uQ3JlYXRlKCBOVUxMLCAxLCBOVUxMLCA0LCBO
VUxMLCAmYm90dG9tQ2FsbGJhY2tzICk7Ci0gICAgQ0dTaGFkaW5nUmVmIGJvdHRvbVNoYWRpbmcg
PSBDR1NoYWRpbmdDcmVhdGVBeGlhbCggY3NwYWNlLCBDR1BvaW50TWFrZShib3R0b21HcmFkaWVu
dC54KCksICBib3R0b21HcmFkaWVudC55KCkpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDR1BvaW50TWFrZShib3R0b21HcmFkaWVudC54KCksIGJvdHRvbUdyYWRpZW50LmJvdHRvbSgp
KSwgYm90dG9tRnVuY3Rpb24sIGZhbHNlLCBmYWxzZSApOworICAgIENHRnVuY3Rpb25SZWYgYm90
dG9tRnVuY3Rpb24gPSBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZi
b3R0b21DYWxsYmFja3MpOworICAgIENHU2hhZGluZ1JlZiBib3R0b21TaGFkaW5nID0gQ0dTaGFk
aW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShib3R0b21HcmFkaWVudC54KCksICBi
b3R0b21HcmFkaWVudC55KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0dQb2ludE1ha2UoYm90dG9tR3JhZGllbnQueCgpLCBib3R0b21H
cmFkaWVudC5ib3R0b20oKSksIGJvdHRvbUZ1bmN0aW9uLCBmYWxzZSwgZmFsc2UpOwogCiAgICAg
c3RydWN0IENHRnVuY3Rpb25DYWxsYmFja3MgbWFpbkNhbGxiYWNrcyA9IHsgMCwgTWFpbkdyYWRp
ZW50SW50ZXJwb2xhdGUsIE5VTEwgfTsKLSAgICBDR0Z1bmN0aW9uUmVmIG1haW5GdW5jdGlvbiA9
IENHRnVuY3Rpb25DcmVhdGUoIE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZtYWluQ2FsbGJhY2tz
ICk7Ci0gICAgQ0dTaGFkaW5nUmVmIG1haW5TaGFkaW5nID0gQ0dTaGFkaW5nQ3JlYXRlQXhpYWwo
IGNzcGFjZSwgQ0dQb2ludE1ha2Uoci54KCksICByLnkoKSksIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENHUG9pbnRNYWtlKHIueCgpLCByLmJvdHRvbSgpKSwgbWFpbkZ1bmN0aW9uLCBm
YWxzZSwgZmFsc2UgKTsKLQotICAgIENHU2hhZGluZ1JlZiBsZWZ0U2hhZGluZyA9IENHU2hhZGlu
Z0NyZWF0ZUF4aWFsKCBjc3BhY2UsIENHUG9pbnRNYWtlKHIueCgpLCAgci55KCkpLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDR1BvaW50TWFrZShyLngoKSArIHJhZGl1cywgci55KCkp
LCBtYWluRnVuY3Rpb24sIGZhbHNlLCBmYWxzZSApOyAgICAgICAgICAgICAgICAgICAgICAgIAot
Ci0gICAgQ0dTaGFkaW5nUmVmIHJpZ2h0U2hhZGluZyA9IENHU2hhZGluZ0NyZWF0ZUF4aWFsKCBj
c3BhY2UsIENHUG9pbnRNYWtlKHIucmlnaHQoKSwgIHIueSgpKSwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ0dQb2ludE1ha2Uoci5yaWdodCgpIC0gcmFkaXVzLCByLnkoKSksIG1haW5G
dW5jdGlvbiwgZmFsc2UsIGZhbHNlICk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAg
ICBpLnAtPnNhdmUoKTsKKyAgICBDR0Z1bmN0aW9uUmVmIG1haW5GdW5jdGlvbiA9IENHRnVuY3Rp
b25DcmVhdGUoTlVMTCwgMSwgTlVMTCwgNCwgTlVMTCwgJm1haW5DYWxsYmFja3MpOworICAgIENH
U2hhZGluZ1JlZiBtYWluU2hhZGluZyA9IENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZSwgQ0dQ
b2ludE1ha2Uoci54KCksICByLnkoKSksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENHUG9pbnRNYWtlKHIueCgpLCByLmJvdHRvbSgpKSwgbWFp
bkZ1bmN0aW9uLCBmYWxzZSwgZmFsc2UpOworCisgICAgQ0dTaGFkaW5nUmVmIGxlZnRTaGFkaW5n
ID0gQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLCBDR1BvaW50TWFrZShyLngoKSwgIHIueSgp
KSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q0dQb2ludE1ha2Uoci54KCkgKyByYWRpdXMsIHIueSgpKSwgbWFpbkZ1bmN0aW9uLCBmYWxzZSwg
ZmFsc2UpOworCisgICAgQ0dTaGFkaW5nUmVmIHJpZ2h0U2hhZGluZyA9IENHU2hhZGluZ0NyZWF0
ZUF4aWFsKGNzcGFjZSwgQ0dQb2ludE1ha2Uoci5yaWdodCgpLCAgci55KCkpLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dQb2ludE1ha2Uo
ci5yaWdodCgpIC0gcmFkaXVzLCByLnkoKSksIG1haW5GdW5jdGlvbiwgZmFsc2UsIGZhbHNlICk7
ICAgICAgICAgICAgCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKICAgICBDR0NvbnRl
eHRDbGlwVG9SZWN0KGNvbnRleHQsIHIpOwotICAgIGkucC0+YWRkUm91bmRlZFJlY3RDbGlwKHIs
IAorICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAociwgCiAgICAgICAg
IG8tPnN0eWxlKCktPmJvcmRlclRvcExlZnRSYWRpdXMoKSwgby0+c3R5bGUoKS0+Ym9yZGVyVG9w
UmlnaHRSYWRpdXMoKSwKICAgICAgICAgby0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1
cygpLCBvLT5zdHlsZSgpLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpKTsKICAgICBDR0NvbnRl
eHREcmF3U2hhZGluZyhjb250ZXh0LCBtYWluU2hhZGluZyk7ICAKLSAgICBpLnAtPnJlc3RvcmUo
KTsgICAgICAKKyAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOyAgICAgIAogCi0gICAg
aS5wLT5zYXZlKCk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKICAgICBDR0NvbnRl
eHRDbGlwVG9SZWN0KGNvbnRleHQsIHRvcEdyYWRpZW50KTsKLSAgICBpLnAtPmFkZFJvdW5kZWRS
ZWN0Q2xpcChlbmNsb3NpbmdJbnRSZWN0KHRvcEdyYWRpZW50KSwgCisgICAgcGFpbnRJbmZvLmNv
bnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChlbmNsb3NpbmdJbnRSZWN0KHRvcEdyYWRpZW50KSwg
CiAgICAgICAgIG8tPnN0eWxlKCktPmJvcmRlclRvcExlZnRSYWRpdXMoKSwgby0+c3R5bGUoKS0+
Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKSwKICAgICAgICAgSW50U2l6ZSgpLCBJbnRTaXplKCkpOwog
ICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIHRvcFNoYWRpbmcpOyAgCi0gICAgaS5w
LT5yZXN0b3JlKCk7ICAgICAgCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsgICAg
ICAKIAotICAgIGkucC0+c2F2ZSgpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAg
ICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBib3R0b21HcmFkaWVudCk7Ci0gICAgaS5w
LT5hZGRSb3VuZGVkUmVjdENsaXAoZW5jbG9zaW5nSW50UmVjdChib3R0b21HcmFkaWVudCksIAor
ICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoZW5jbG9zaW5nSW50UmVj
dChib3R0b21HcmFkaWVudCksIAogICAgICAgICBJbnRTaXplKCksIEludFNpemUoKSwKICAgICAg
ICAgby0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLCBvLT5zdHlsZSgpLT5ib3Jk
ZXJCb3R0b21SaWdodFJhZGl1cygpKTsKICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0
LCBib3R0b21TaGFkaW5nKTsgCi0gICAgaS5wLT5yZXN0b3JlKCk7Ci0gICAgCi0gICAgaS5wLT5z
YXZlKCk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKworICAgIHBhaW50SW5m
by5jb250ZXh0LT5zYXZlKCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCByKTsK
LSAgICBpLnAtPmFkZFJvdW5kZWRSZWN0Q2xpcChyLCAKKyAgICBwYWludEluZm8uY29udGV4dC0+
YWRkUm91bmRlZFJlY3RDbGlwKHIsIAogICAgICAgICBvLT5zdHlsZSgpLT5ib3JkZXJUb3BMZWZ0
UmFkaXVzKCksIG8tPnN0eWxlKCktPmJvcmRlclRvcFJpZ2h0UmFkaXVzKCksCiAgICAgICAgIG8t
PnN0eWxlKCktPmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKSwgby0+c3R5bGUoKS0+Ym9yZGVyQm90
dG9tUmlnaHRSYWRpdXMoKSk7CiAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgbGVm
dFNoYWRpbmcpOwogICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIHJpZ2h0U2hhZGlu
Zyk7Ci0gICAgaS5wLT5yZXN0b3JlKCk7Ci0gICAgCi0gICAgaS5wLT5yZXN0b3JlKCk7CisgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKworICAgIHBhaW50SW5mby5jb250ZXh0LT5y
ZXN0b3JlKCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b24o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3Qg
SW50UmVjdCYgcikKLXsgICAgICAgIAotICAgIGkucC0+c2F2ZSgpOwotICAgICAgICAKLSAgICBJ
bnRSZWN0IGJvdW5kcyA9IEludFJlY3Qoci54KCkgKyBvLT5zdHlsZSgpLT5ib3JkZXJMZWZ0V2lk
dGgoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIueSgpICsgby0+c3R5bGUoKS0+
Ym9yZGVyVG9wV2lkdGgoKSwgCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0
dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgp
OworCisgICAgSW50UmVjdCBib3VuZHMgPSBJbnRSZWN0KHIueCgpICsgby0+c3R5bGUoKS0+Ym9y
ZGVyTGVmdFdpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIueSgpICsgby0+
c3R5bGUoKS0+Ym9yZGVyVG9wV2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ci53aWR0aCgpIC0gby0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCkgLSBvLT5zdHlsZSgpLT5i
b3JkZXJSaWdodFdpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuaGVpZ2h0
KCkgLSBvLT5zdHlsZSgpLT5ib3JkZXJUb3BXaWR0aCgpIC0gby0+c3R5bGUoKS0+Ym9yZGVyQm90
dG9tV2lkdGgoKSk7CiAgICAgLy8gRHJhdyB0aGUgZ3JhZGllbnRzIHRvIGdpdmUgdGhlIHN0eWxl
ZCBwb3B1cCBtZW51IGEgYnV0dG9uIGFwcGVhcmFuY2UKLSAgICBwYWludE1lbnVMaXN0QnV0dG9u
R3JhZGllbnRzKG8sIGksIGJvdW5kcyk7Ci0gICAgICAgICAgICAgICAgCisgICAgcGFpbnRNZW51
TGlzdEJ1dHRvbkdyYWRpZW50cyhvLCBwYWludEluZm8sIGJvdW5kcyk7CisKICAgICBmbG9hdCBm
b250U2NhbGUgPSBvLT5zdHlsZSgpLT5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXplOwogICAgIGZs
b2F0IGNlbnRlclkgPSBib3VuZHMueSgpICsgYm91bmRzLmhlaWdodCgpIC8gMi4wOwogICAgIGZs
b2F0IGFycm93SGVpZ2h0ID0gYmFzZUFycm93SGVpZ2h0ICogZm9udFNjYWxlOwotICAgIGZsb2F0
IGFycm93V2lkdGggPSBiYXNlQXJyb3dXaWR0aCAqIGZvbnRTY2FsZTsgICAgCisgICAgZmxvYXQg
YXJyb3dXaWR0aCA9IGJhc2VBcnJvd1dpZHRoICogZm9udFNjYWxlOwogICAgIGZsb2F0IGxlZnRF
ZGdlID0gYm91bmRzLnJpZ2h0KCkgLSBhcnJvd1BhZGRpbmdSaWdodCAtIGFycm93V2lkdGg7CiAg
ICAgZmxvYXQgc3BhY2VCZXR3ZWVuQXJyb3dzID0gYmFzZVNwYWNlQmV0d2VlbkFycm93cyAqIGZv
bnRTY2FsZTsKLSAgICAKLSAgICBpLnAtPnNldEZpbGxDb2xvcihvLT5zdHlsZSgpLT5jb2xvcigp
KTsKLSAgICBpLnAtPnNldFBlbihQZW4oby0+c3R5bGUoKS0+Y29sb3IoKSkpOwotICAgIAorCisg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihvLT5zdHlsZSgpLT5jb2xvcigpKTsK
KyAgICBwYWludEluZm8uY29udGV4dC0+c2V0UGVuKG8tPnN0eWxlKCktPmNvbG9yKCkpOworCiAg
ICAgRmxvYXRQb2ludCBhcnJvdzFbM107CiAgICAgYXJyb3cxWzBdID0gRmxvYXRQb2ludChsZWZ0
RWRnZSwgY2VudGVyWSAtIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMCk7CiAgICAgYXJyb3cxWzFd
ID0gRmxvYXRQb2ludChsZWZ0RWRnZSArIGFycm93V2lkdGgsIGNlbnRlclkgLSBzcGFjZUJldHdl
ZW5BcnJvd3MgLyAyLjApOwogICAgIGFycm93MVsyXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UgKyBh
cnJvd1dpZHRoIC8gMi4wLCBjZW50ZXJZIC0gc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4wIC0gYXJy
b3dIZWlnaHQpOwogCiAgICAgLy8gRHJhdyB0aGUgdG9wIGFycm93Ci0gICAgaS5wLT5kcmF3Q29u
dmV4UG9seWdvbigzLCBhcnJvdzEsIHRydWUpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3
Q29udmV4UG9seWdvbigzLCBhcnJvdzEsIHRydWUpOwogCiAgICAgRmxvYXRQb2ludCBhcnJvdzJb
M107CiAgICAgYXJyb3cyWzBdID0gRmxvYXRQb2ludChsZWZ0RWRnZSwgY2VudGVyWSArIHNwYWNl
QmV0d2VlbkFycm93cyAvIDIuMCk7CiAgICAgYXJyb3cyWzFdID0gRmxvYXRQb2ludChsZWZ0RWRn
ZSArIGFycm93V2lkdGgsIGNlbnRlclkgKyBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjApOwotICAg
IGFycm93MlsyXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UgKyBhcnJvd1dpZHRoIC8gMi4wLCBjZW50
ZXJZICsgc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4wICsgYXJyb3dIZWlnaHQpOyAgIAotICAgIAor
ICAgIGFycm93MlsyXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UgKyBhcnJvd1dpZHRoIC8gMi4wLCBj
ZW50ZXJZICsgc3BhY2VCZXR3ZWVuQXJyb3dzIC8gMi4wICsgYXJyb3dIZWlnaHQpOworCiAgICAg
Ly8gRHJhdyB0aGUgYm90dG9tIGFycm93Ci0gICAgaS5wLT5kcmF3Q29udmV4UG9seWdvbigzLCBh
cnJvdzIsIHRydWUpOyAKLSAgICAKKyAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBv
bHlnb24oMywgYXJyb3cyLCB0cnVlKTsKKwogICAgIENvbG9yIGxlZnRTZXBhcmF0b3JDb2xvcigw
LCAwLCAwLCA0MCk7CiAgICAgQ29sb3IgcmlnaHRTZXBhcmF0b3JDb2xvcigyNTUsIDI1NSwgMjU1
LCA0MCk7CiAgICAgaW50IHNlcGFyYXRvclNwYWNlID0gMjsKLSAgICBpbnQgbGVmdEVkZ2VPZlNl
cGFyYXRvciA9IGludChsZWZ0RWRnZSAtIGFycm93UGFkZGluZ0xlZnQpOyAvLyBGSVhNRTogUm91
bmQ/Ci0gICAgCi0gICAgLy8gRHJhdyB0aGUgc2VwYXJhdG9yIHRvIHRoZSBsZWZ0IG9mIHRoZSBh
cnJvd3MKLSAgICBpLnAtPnNldFBlbihQZW4obGVmdFNlcGFyYXRvckNvbG9yKSk7Ci0gICAgaS5w
LT5kcmF3TGluZShJbnRQb2ludChsZWZ0RWRnZU9mU2VwYXJhdG9yLCBib3VuZHMueSgpKSwgSW50
UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciwgYm91bmRzLmJvdHRvbSgpKSk7CisgICAgaW50IGxl
ZnRFZGdlT2ZTZXBhcmF0b3IgPSBzdGF0aWNfY2FzdDxpbnQ+KGxlZnRFZGdlIC0gYXJyb3dQYWRk
aW5nTGVmdCk7IC8vIEZJWE1FOiBSb3VuZD8KIAotICAgIGkucC0+c2V0UGVuKFBlbihyaWdodFNl
cGFyYXRvckNvbG9yKSk7Ci0gICAgaS5wLT5kcmF3TGluZShJbnRQb2ludChsZWZ0RWRnZU9mU2Vw
YXJhdG9yICsgc2VwYXJhdG9yU3BhY2UsIGJvdW5kcy55KCkpLCBJbnRQb2ludChsZWZ0RWRnZU9m
U2VwYXJhdG9yICsgc2VwYXJhdG9yU3BhY2UsIGJvdW5kcy5ib3R0b20oKSkpOworICAgIC8vIERy
YXcgdGhlIHNlcGFyYXRvciB0byB0aGUgbGVmdCBvZiB0aGUgYXJyb3dzCisgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnNldFBlbihsZWZ0U2VwYXJhdG9yQ29sb3IpOworICAgIHBhaW50SW5mby5jb250
ZXh0LT5kcmF3TGluZShJbnRQb2ludChsZWZ0RWRnZU9mU2VwYXJhdG9yLCBib3VuZHMueSgpKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQobGVmdEVkZ2VPZlNlcGFy
YXRvciwgYm91bmRzLmJvdHRvbSgpKSk7CisKKyAgICBwYWludEluZm8uY29udGV4dC0+c2V0UGVu
KHJpZ2h0U2VwYXJhdG9yQ29sb3IpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3TGluZShJ
bnRQb2ludChsZWZ0RWRnZU9mU2VwYXJhdG9yICsgc2VwYXJhdG9yU3BhY2UsIGJvdW5kcy55KCkp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChsZWZ0RWRnZU9mU2Vw
YXJhdG9yICsgc2VwYXJhdG9yU3BhY2UsIGJvdW5kcy5ib3R0b20oKSkpOwogCi0gICAgaS5wLT5y
ZXN0b3JlKCk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCShyZXZpc2lvbiAxNzUx
NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDUsMTYgKzE0NSwxNiBAQCBib29sIFJlbmRlclZpZXc6OmFic29sdXRlUG9zaXRpb24oaW50
ICZ4CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyVmlldzo6cGFpbnQoUGFpbnRJ
bmZvJiBpLCBpbnQgX3R4LCBpbnQgX3R5KQordm9pZCBSZW5kZXJWaWV3OjpwYWludChQYWludElu
Zm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgLy8gQ2FjaGUgdGhlIHByaW50
IHJlY3QgYmVjYXVzZSB0aGUgZGlydHkgcmVjdCBjb3VsZCBnZXQgY2hhbmdlZCBkdXJpbmcgcGFp
bnRpbmcuCiAgICAgaWYgKG1fcHJpbnRpbmdNb2RlKQotICAgICAgICBzZXRQcmludFJlY3QoaS5y
KTsKKyAgICAgICAgc2V0UHJpbnRSZWN0KHBhaW50SW5mby5yZWN0KTsKICAgICAKLSAgICBwYWlu
dE9iamVjdChpLCBfdHgsIF90eSk7CisgICAgcGFpbnRPYmplY3QocGFpbnRJbmZvLCB0eCwgdHkp
OwogfQogCi12b2lkIFJlbmRlclZpZXc6OnBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZvJiBp
LCBpbnQgX3R4LCBpbnQgX3R5KQordm9pZCBSZW5kZXJWaWV3OjpwYWludEJveERlY29yYXRpb25z
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKICAgICAvLyBDaGVjayB0
byBzZWUgaWYgd2UgYXJlIGVuY2xvc2VkIGJ5IGEgdHJhbnNwYXJlbnQgbGF5ZXIuICBJZiBzbywg
d2UgY2Fubm90IGJsaXQKICAgICAvLyB3aGVuIHNjcm9sbGluZywgYW5kIHdlIG5lZWQgdG8gdXNl
IHNsb3cgcmVwYWludHMuCkBAIC0xNjQsNyArMTY0LDcgQEAgdm9pZCBSZW5kZXJWaWV3OjpwYWlu
dEJveERlY29yYXRpb25zKFBhaQogICAgICAgICBpZiAobGF5ZXItPmlzVHJhbnNwYXJlbnQoKSB8
fCBsYXllci0+dHJhbnNwYXJlbnRBbmNlc3RvcigpKQogICAgICAgICAgICAgZnJhbWVWaWV3KCkt
PnNldFVzZVNsb3dSZXBhaW50cygpOwogICAgIH0KLSAgICAKKwogICAgIGlmIChlbHQgfHwgKGZp
cnN0Q2hpbGQoKSAmJiBmaXJzdENoaWxkKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJ
QkxFKSB8fCAhdmlldygpKQogICAgICAgICByZXR1cm47CiAKQEAgLTE3NiwxMiArMTc2LDEyIEBA
IHZvaWQgUmVuZGVyVmlldzo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWkKICAgICBlbHNlIHsKICAg
ICAgICAgQ29sb3IgYmFzZUNvbG9yID0gZnJhbWVWaWV3KCktPmJhc2VCYWNrZ3JvdW5kQ29sb3Io
KTsKICAgICAgICAgaWYgKGJhc2VDb2xvci5hbHBoYSgpID4gMCkgewotICAgICAgICAgICAgaS5w
LT5zYXZlKCk7Ci0gICAgICAgICAgICBpLnAtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3Np
dGVDb3B5KTsKLSAgICAgICAgICAgIGkucC0+ZmlsbFJlY3QoaS5yLCBiYXNlQ29sb3IpOwotICAg
ICAgICAgICAgaS5wLT5yZXN0b3JlKCk7CisgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+
c2F2ZSgpOworICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVDb3B5KTsKKyAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5maWxs
UmVjdChwYWludEluZm8ucmVjdCwgYmFzZUNvbG9yKTsKKyAgICAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaS5wLT5jbGVh
clJlY3QoaS5yKTsKKyAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGVhclJlY3QocGFp
bnRJbmZvLnJlY3QpOwogICAgIH0KIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkocmV2
aXNpb24gMTc1MTYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU0LDggKzU0LDggQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCBy
ZXBhaW50Vmlld1JlY3RhbmdsZShjb25zdCBJbnRSZWN0JiByLCBib29sIGltbWVkaWF0ZSA9IGZh
bHNlKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiBpLCBpbnQgdHgs
IGludCB0eSk7Ci0gICAgdmlydHVhbCB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUGFpbnRJbmZv
JiBpLCBpbnQgX3R4LCBpbnQgX3R5KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludEJveERlY29yYXRpb25z
KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICAKICAgICB2b2lkIHNldFNlbGVjdGlv
bihSZW5kZXJPYmplY3QgKnMsIGludCBzcCwgUmVuZGVyT2JqZWN0ICplLCBpbnQgZXApOwogICAg
IHZvaWQgY2xlYXJTZWxlY3Rpb24oKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldp
ZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNw
cAkocmV2aXNpb24gMTc1MTYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsMjIgKzE2NiwyMiBAQCB2b2lkIFJlbmRlcldpZGdldDo6
c2V0U3R5bGUoUmVuZGVyU3R5bGUgCiAgICAgfQogfQogCi12b2lkIFJlbmRlcldpZGdldDo6cGFp
bnQoUGFpbnRJbmZvJiBpLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyV2lkZ2V0OjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAgaWYgKCFzaG91
bGRQYWludChpLCB0eCwgdHkpKQorICAgIGlmICghc2hvdWxkUGFpbnQocGFpbnRJbmZvLCB0eCwg
dHkpKQogICAgICAgICByZXR1cm47CiAKICAgICB0eCArPSBtX3g7CiAgICAgdHkgKz0gbV95Owog
Ci0gICAgaWYgKHNob3VsZFBhaW50QmFja2dyb3VuZE9yQm9yZGVyKCkgJiYgaS5waGFzZSAhPSBQ
YWludFBoYXNlT3V0bGluZSAmJiBpLnBoYXNlICE9IFBhaW50UGhhc2VTZWxmT3V0bGluZSkgCi0g
ICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMoaSwgdHgsIHR5KTsKKyAgICBpZiAoc2hvdWxkUGFp
bnRCYWNrZ3JvdW5kT3JCb3JkZXIoKSAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZU91
dGxpbmUgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxmT3V0bGluZSkgCisgICAg
ICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCB0eCwgdHkpOwogCi0gICAgaWYgKCFt
X3ZpZXcgfHwgaS5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCB8fCBzdHlsZSgpLT52aXNp
YmlsaXR5KCkgIT0gVklTSUJMRSkKKyAgICBpZiAoIW1fdmlldyB8fCBwYWludEluZm8ucGhhc2Ug
IT0gUGFpbnRQaGFzZUZvcmVncm91bmQgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lC
TEUpCiAgICAgICAgIHJldHVybjsKIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBpZiAoc3R5bGUo
KS0+aGlnaGxpZ2h0KCkgIT0gbnVsbEF0b20gJiYgIWkucC0+cGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgIGlmIChzdHlsZSgpLT5oaWdobGlnaHQoKSAhPSBudWxsQXRvbSAmJiAhcGFpbnRJbmZvLmNv
bnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcGFpbnRDdXN0b21IaWdobGlnaHQo
dHggLSBtX3gsIHR5IC0gbV95LCBzdHlsZSgpLT5oaWdobGlnaHQoKSwgdHJ1ZSk7CiAjZW5kaWYK
IApAQCAtMTkzLDEyICsxOTMsMTIgQEAgdm9pZCBSZW5kZXJXaWRnZXQ6OnBhaW50KFBhaW50SW5m
byYgaSwgaQogCiAgICAgICAgIC8vIFRlbGwgdGhlIHdpZGdldCB0byBwYWludCBub3cuICBUaGlz
IGlzIHRoZSBvbmx5IHRpbWUgdGhlIHdpZGdldCBpcyBhbGxvd2VkCiAgICAgICAgIC8vIHRvIHBh
aW50IGl0c2VsZi4gIFRoYXQgd2F5IGl0IHdpbGwgY29tcG9zaXRlIHByb3Blcmx5IHdpdGggei1p
bmRleGVkIGxheWVycy4KLSAgICAgICAgbV93aWRnZXQtPnBhaW50KGkucCwgaS5yKTsKKyAgICAg
ICAgbV93aWRnZXQtPnBhaW50KHBhaW50SW5mby5jb250ZXh0LCBwYWludEluZm8ucmVjdCk7CiAg
ICAgfQogCiAgICAgLy8gUGFpbnQgYSBwYXJ0aWFsbHkgdHJhbnNwYXJlbnQgd2FzaCBvdmVyIHNl
bGVjdGVkIHdpZGdldHMuCiAgICAgaWYgKGlzU2VsZWN0ZWQoKSAmJiAhZG9jdW1lbnQoKS0+cHJp
bnRpbmcoKSkKLSAgICAgICAgaS5wLT5maWxsUmVjdChzZWxlY3Rpb25SZWN0KCksIHNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcigpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmZpbGxSZWN0
KHNlbGVjdGlvblJlY3QoKSwgc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOwogfQogCiB2b2lk
IFJlbmRlcldpZGdldDo6Zm9jdXNJbihXaWRnZXQqKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyV2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lk
Z2V0LmgJKHJldmlzaW9uIDE3NTE2KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDI2ICsyMSwyNSBAQAogICoKICAqLwogCi0jaWZuZGVm
IFJlbmRlcldpZGdldF9ICi0jZGVmaW5lIFJlbmRlcldpZGdldF9ICisjaWZuZGVmIFJlbmRlcldp
ZGdldF9oCisjZGVmaW5lIFJlbmRlcldpZGdldF9oCiAKICNpbmNsdWRlICJSZW5kZXJSZXBsYWNl
ZC5oIgogI2luY2x1ZGUgIldpZGdldENsaWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LWNsYXNzIFJlbmRlcldpZGdldCA6IHB1YmxpYyBSZW5kZXJSZXBsYWNlZCwgcHVibGljIFdpZGdl
dENsaWVudAoteworY2xhc3MgUmVuZGVyV2lkZ2V0IDogcHVibGljIFJlbmRlclJlcGxhY2VkLCBw
dWJsaWMgV2lkZ2V0Q2xpZW50IHsKIHB1YmxpYzoKICAgICBSZW5kZXJXaWRnZXQoTm9kZSopOwog
ICAgIHZpcnR1YWwgflJlbmRlcldpZGdldCgpOwogCisgICAgdmlydHVhbCBib29sIGlzV2lkZ2V0
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFJl
bmRlclN0eWxlKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4
LCBpbnQgdHkpOwogCi0gICAgdmlydHVhbCBib29sIGlzV2lkZ2V0KCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfTsKLQogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CiAgICAgdmlydHVhbCB2b2lk
IGxheW91dCggKTsKIApAQCAtNDgsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAgICBSZW5kZXJBcmVu
YSogcmVmKCkgeyArK21fcmVmQ291bnQ7IHJldHVybiByZW5kZXJBcmVuYSgpOyB9CiAgICAgdm9p
ZCBkZXJlZihSZW5kZXJBcmVuYSopOwotICAgIAorCiAgICAgdmlydHVhbCB2b2lkIHNldFNlbGVj
dGlvblN0YXRlKFNlbGVjdGlvblN0YXRlKTsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVXaWRn
ZXRQb3NpdGlvbigpOwpAQCAtNzIsMTAgKzcxLDExIEBAIHByaXZhdGU6CiBwcm90ZWN0ZWQ6CiAg
ICAgV2lkZ2V0KiBtX3dpZGdldDsKICAgICBGcmFtZVZpZXcqIG1fdmlldzsKKwogcHJpdmF0ZToK
ICAgICBpbnQgbV9yZWZDb3VudDsKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAot
I2VuZGlmCisjZW5kaWYgLy8gUmVuZGVyV2lkZ2V0X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1Jvb3RJbmxpbmVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJ
bmxpbmVCb3guY3BwCShyZXZpc2lvbiAxNzUxNikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJ
bmxpbmVCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSwxMSArOTksMTEgQEAgaW50IFJvb3RJ
bmxpbmVCb3g6OnBsYWNlRWxsaXBzaXNCb3goYm9vbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXZvaWQgUm9vdElubGluZUJveDo6cGFpbnRFbGxpcHNpc0JveChSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYgaSwgaW50IF90eCwgaW50IF90eSkgY29uc3QKK3ZvaWQgUm9vdElubGluZUJveDo6cGFp
bnRFbGxpcHNpc0JveChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgs
IGludCB0eSkgY29uc3QKIHsKLSAgICBpZiAobV9lbGxpcHNpc0JveCAmJiBvYmplY3QoKS0+c2hv
dWxkUGFpbnRXaXRoaW5Sb290KGkpICYmIG9iamVjdCgpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkg
PT0gVklTSUJMRSAmJgotICAgICAgICBpLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQot
ICAgICAgICBtX2VsbGlwc2lzQm94LT5wYWludChpLCBfdHgsIF90eSk7CisgICAgaWYgKG1fZWxs
aXBzaXNCb3ggJiYgb2JqZWN0KCktPnNob3VsZFBhaW50V2l0aGluUm9vdChwYWludEluZm8pICYm
IG9iamVjdCgpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSAmJgorICAgICAgICAg
ICAgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQorICAgICAgICBtX2Vs
bGlwc2lzQm94LT5wYWludChwYWludEluZm8sIHR4LCB0eSk7CiB9CiAKICNpZiBQTEFURk9STShN
QUMpCkBAIC0xMTgsMjcgKzExOCwyNyBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OmFkZEhpZ2hsaWdo
dE92ZXJmbG93CiAgICAgbV9ib3R0b21PdmVyZmxvdyA9IG1heChtX2JvdHRvbU92ZXJmbG93LCBp
bmZsYXRlZFJlY3QuYm90dG9tKCkpOwogfQogCi12b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50Q3Vz
dG9tSGlnaGxpZ2h0KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgdHgsIGludCB0eSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBoaWdobGlnaHRUeXBlKQordm9pZCBSb290SW5saW5lQm94Ojpw
YWludEN1c3RvbUhpZ2hsaWdodChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBp
bnQgdHgsIGludCB0eSwgY29uc3QgQXRvbWljU3RyaW5nJiBoaWdobGlnaHRUeXBlKQogewotICAg
IGlmICghb2JqZWN0KCktPnNob3VsZFBhaW50V2l0aGluUm9vdChpKSB8fCBvYmplY3QoKS0+c3R5
bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgaS5waGFzZSAhPSBQYWludFBoYXNlRm9y
ZWdyb3VuZCkKKyAgICBpZiAoIW9iamVjdCgpLT5zaG91bGRQYWludFdpdGhpblJvb3QocGFpbnRJ
bmZvKSB8fCBvYmplY3QoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgfHwgcGFp
bnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBHZXQgdGhlIGluZmxhdGVkIHJlY3Qgc28gdGhhdCB3ZSBjYW4gcHJvcGVybHkgaGl0
IHRlc3QuCiAgICAgRmxvYXRSZWN0IHJvb3RSZWN0KHR4ICsgeFBvcygpLCB0eSArIHNlbGVjdGlv
blRvcCgpLCB3aWR0aCgpLCBzZWxlY3Rpb25IZWlnaHQoKSk7CiAgICAgRmxvYXRSZWN0IGluZmxh
dGVkUmVjdCA9IE1hYyhvYmplY3QoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSktPmN1c3RvbUhpZ2hs
aWdodExpbmVSZWN0KGhpZ2hsaWdodFR5cGUsIHJvb3RSZWN0KTsKLSAgICBpZiAoaW5mbGF0ZWRS
ZWN0LmludGVyc2VjdHMoaS5yKSkKKyAgICBpZiAoaW5mbGF0ZWRSZWN0LmludGVyc2VjdHMocGFp
bnRJbmZvLnJlY3QpKQogICAgICAgICBNYWMob2JqZWN0KCktPmRvY3VtZW50KCktPmZyYW1lKCkp
LT5wYWludEN1c3RvbUhpZ2hsaWdodChoaWdobGlnaHRUeXBlLCByb290UmVjdCwgcm9vdFJlY3Qs
IGZhbHNlLCB0cnVlKTsKIH0KICNlbmRpZgogCi12b2lkIFJvb3RJbmxpbmVCb3g6OnBhaW50KFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUm9vdElubGlu
ZUJveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBp
bnQgdHkpCiB7Ci0gICAgSW5saW5lRmxvd0JveDo6cGFpbnQoaSwgdHgsIHR5KTsKLSAgICBwYWlu
dEVsbGlwc2lzQm94KGksIHR4LCB0eSk7CisgICAgSW5saW5lRmxvd0JveDo6cGFpbnQocGFpbnRJ
bmZvLCB0eCwgdHkpOworICAgIHBhaW50RWxsaXBzaXNCb3gocGFpbnRJbmZvLCB0eCwgdHkpOwog
I2lmIFBMQVRGT1JNKE1BQykKICAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IG9iamVjdCgp
LT5zdHlsZShtX2ZpcnN0TGluZSk7Ci0gICAgaWYgKHN0eWxlVG9Vc2UtPmhpZ2hsaWdodCgpICE9
IG51bGxBdG9tICYmICFpLnAtPnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcGFpbnRDdXN0
b21IaWdobGlnaHQoaSwgdHgsIHR5LCBzdHlsZVRvVXNlLT5oaWdobGlnaHQoKSk7CisgICAgaWYg
KHN0eWxlVG9Vc2UtPmhpZ2hsaWdodCgpICE9IG51bGxBdG9tICYmICFwYWludEluZm8uY29udGV4
dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBwYWludEN1c3RvbUhpZ2hsaWdodChwYWlu
dEluZm8sIHR4LCB0eSwgc3R5bGVUb1VzZS0+aGlnaGxpZ2h0KCkpOwogI2VuZGlmCiB9CiAKQEAg
LTE3Niw3ICsxNzYsNyBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OmNoaWxkUmVtb3ZlZChJbmxpbmVC
CiB9CiAKIEdhcFJlY3RzIFJvb3RJbmxpbmVCb3g6OmZpbGxMaW5lU2VsZWN0aW9uR2FwKGludCBz
ZWxUb3AsIGludCBzZWxIZWlnaHQsIFJlbmRlckJsb2NrKiByb290QmxvY2ssIGludCBibG9ja1gs
IGludCBibG9ja1ksIGludCB0eCwgaW50IHR5LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvKiBpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8qIHBhaW50SW5mbykKIHsKICAgICBHYXBSZWN0cyByZXN1bHQ7CiAgICAg
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBsaW5lU3RhdGUgPSBzZWxlY3Rpb25TdGF0ZSgp
OwpAQCAtMTg5LDExICsxODksMTEgQEAgR2FwUmVjdHMgUm9vdElubGluZUJveDo6ZmlsbExpbmVT
ZWxlY3RpbwogICAgIGlmIChsZWZ0R2FwKQogICAgICAgICByZXN1bHQudW5pdGVMZWZ0KGJsb2Nr
KCktPmZpbGxMZWZ0U2VsZWN0aW9uR2FwKGZpcnN0Qm94LT5wYXJlbnQoKS0+b2JqZWN0KCksIAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
cnN0Qm94LT54UG9zKCksIHNlbFRvcCwgc2VsSGVpZ2h0LCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290QmxvY2ssIGJsb2NrWCwgYmxv
Y2tZLCB0eCwgdHksIGkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByb290QmxvY2ssIGJsb2NrWCwgYmxvY2tZLCB0eCwgdHksIHBhaW50
SW5mbykpOwogICAgIGlmIChyaWdodEdhcCkKICAgICAgICAgcmVzdWx0LnVuaXRlUmlnaHQoYmxv
Y2soKS0+ZmlsbFJpZ2h0U2VsZWN0aW9uR2FwKGxhc3RCb3gtPnBhcmVudCgpLT5vYmplY3QoKSwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsYXN0Qm94LT54UG9zKCkgKyBsYXN0Qm94LT53aWR0aCgpLCBzZWxUb3AsIHNlbEhlaWdodCwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByb290QmxvY2ssIGJsb2NrWCwgYmxvY2tZLCB0eCwgdHksIGkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RCbG9jaywgYmxv
Y2tYLCBibG9ja1ksIHR4LCB0eSwgcGFpbnRJbmZvKSk7CiAKICAgICBpZiAoZmlyc3RCb3ggJiYg
Zmlyc3RCb3ggIT0gbGFzdEJveCkgewogICAgICAgICAvLyBOb3cgZmlsbCBpbiBhbnkgZ2FwcyBv
biB0aGUgbGluZSB0aGF0IG9jY3VycmVkIGJldHdlZW4gdHdvIHNlbGVjdGVkIGVsZW1lbnRzLgpA
QCAtMjAyLDE0ICsyMDIsMTQgQEAgR2FwUmVjdHMgUm9vdElubGluZUJveDo6ZmlsbExpbmVTZWxl
Y3RpbwogICAgICAgICAgICAgaWYgKGJveC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmpl
Y3Q6OlNlbGVjdGlvbk5vbmUpIHsKICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVDZW50ZXIo
YmxvY2soKS0+ZmlsbEhvcml6b250YWxTZWxlY3Rpb25HYXAoYm94LT5wYXJlbnQoKS0+b2JqZWN0
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxhc3RYICsgdHgsIHNlbFRvcCArIHR5LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBib3gtPnhQb3MoKSAtIGxhc3RYLCBzZWxIZWlnaHQsIGkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm94
LT54UG9zKCkgLSBsYXN0WCwgc2VsSGVpZ2h0LCBwYWludEluZm8pKTsKICAgICAgICAgICAgICAg
ICBsYXN0WCA9IGJveC0+eFBvcygpICsgYm94LT53aWR0aCgpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKGJveCA9PSBsYXN0Qm94KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgfQotICAgICAgCisKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUm9vdElubGluZUJveC5oCShyZXZpc2lvbiAxNzUxNikKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtODgsOCArODgsOCBAQCBw
dWJsaWM6CiAKICAgICBFbGxpcHNpc0JveCogZWxsaXBzaXNCb3goKSBjb25zdCB7IHJldHVybiBt
X2VsbGlwc2lzQm94OyB9CiAKLSAgICB2b2lkIHBhaW50RWxsaXBzaXNCb3goUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mLCBpbnQgX3R4LCBpbnQgX3R5KSBjb25zdDsKLSAgICBib29sIGhpdFRlc3RF
bGxpcHNpc0JveChIaXRUZXN0UmVzdWx0JiwgaW50IF94LCBpbnQgX3ksIGludCBfdHgsIGludCBf
dHksIEhpdFRlc3RBY3Rpb24sIGJvb2wpOworICAgIHZvaWQgcGFpbnRFbGxpcHNpc0JveChSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KSBjb25zdDsKKyAgICBib29sIGhp
dFRlc3RFbGxpcHNpc0JveChIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGlu
dCB0eSwgSGl0VGVzdEFjdGlvbiwgYm9vbCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGNsZWFy
VHJ1bmNhdGlvbigpOwogCkBAIC05OCw3ICs5OCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50
Q3VzdG9tSGlnaGxpZ2h0KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHks
IGNvbnN0IEF0b21pY1N0cmluZyYgaGlnaGxpZ2h0VHlwZSk7CiAjZW5kaWYKIAotICAgIHZpcnR1
YWwgdm9pZCBwYWludChSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgaW50IF90eCwgaW50IF90
eSk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgaW50
IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0
UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQsIGludCwgaW50LCBpbnQpOwogCiAgICAgYm9v
bCBoYXNTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9oYXNTZWxlY3RlZENoaWxk
cmVuOyB9CkBAIC0xMDcsMTAgKzEwNywxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZW5kZXJP
YmplY3Q6OlNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlKCk7CiAgICAgSW5saW5lQm94KiBm
aXJzdFNlbGVjdGVkQm94KCk7CiAgICAgSW5saW5lQm94KiBsYXN0U2VsZWN0ZWRCb3goKTsKLSAg
ICAKKwogICAgIEdhcFJlY3RzIGZpbGxMaW5lU2VsZWN0aW9uR2FwKGludCBzZWxUb3AsIGludCBz
ZWxIZWlnaHQsIFJlbmRlckJsb2NrKiByb290QmxvY2ssIGludCBibG9ja1gsIGludCBibG9ja1ks
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eCwgaW50IHR5LCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyopOwotICAgIAorCiAgICAgUmVuZGVyQmxvY2sqIGJs
b2NrKCkgY29uc3Q7CiAKICAgICBpbnQgc2VsZWN0aW9uVG9wKCk7CkluZGV4OiBXZWJDb3JlL3Jl
bmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9TVkdJbmxpbmVGbG93Qm94LmNwcAkocmV2aXNpb24gMTc1MTYpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNDMgKzU5
LDQyIEBAIHZvaWQgU1ZHSW5saW5lRmxvd0JveDo6dmVydGljYWxseUFsaWduQm8KIAogdm9pZCBw
YWludFNWR0lubGluZUZsb3coSW5saW5lRmxvd0JveCogZmxvdywgUmVuZGVyT2JqZWN0KiBvYmpl
Y3QsIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQog
ewotICAgIGlmIChwYWludEluZm8ucC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIGlmIChwYWlu
dEluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgS1JlbmRlcmluZ0RldmljZSogZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7CiAgICAg
S1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHQgPSBkZXZpY2UtPmN1cnJlbnRDb250ZXh0
KCk7CiAgICAgYm9vbCBzaG91bGRQb3BDb250ZXh0ID0gZmFsc2U7CiAgICAgaWYgKGNvbnRleHQp
Ci0gICAgICAgIHBhaW50SW5mby5wLT5zYXZlKCk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5zYXZlKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIE5lZWQgdG8gc2V0IHVwIEtDYW52YXMg
cmVuZGVyaW5nIGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gZG9uZS4KLSAgICAgICAgY29udGV4
dCA9IHBhaW50SW5mby5wLT5jcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCk7CisgICAgICAg
IGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dC0+Y3JlYXRlUmVuZGVyaW5nRGV2aWNlQ29udGV4
dCgpOwogICAgICAgICBkZXZpY2UtPnB1c2hDb250ZXh0KGNvbnRleHQpOwogICAgICAgICBzaG91
bGRQb3BDb250ZXh0ID0gdHJ1ZTsKICAgICB9Ci0gICAgCiAKICAgICBjb250ZXh0LT5jb25jYXRD
VE0ob2JqZWN0LT5sb2NhbFRyYW5zZm9ybSgpKTsKLSAgICAKLSAgICBGbG9hdFJlY3QgYm91bmRp
bmdCb3godHgrZmxvdy0+eFBvcygpICwgdHkrZmxvdy0+eVBvcygpLCBmbG93LT53aWR0aCgpLCBm
bG93LT5oZWlnaHQoKSk7Ci0gICAgCisKKyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3godHggKyBm
bG93LT54UG9zKCksIHR5ICsgZmxvdy0+eVBvcygpLCBmbG93LT53aWR0aCgpLCBmbG93LT5oZWln
aHQoKSk7CisKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBvYmplY3QtPnN0
eWxlKCktPnN2Z1N0eWxlKCk7CiAgICAgaWYgKFNWR1Jlc291cmNlQ2xpcHBlciogY2xpcHBlciA9
IGdldENsaXBwZXJCeUlkKG9iamVjdC0+ZG9jdW1lbnQoKSwgc3ZnU3R5bGUtPmNsaXBQYXRoKCku
c3Vic3RyaW5nKDEpKSkKICAgICAgICAgY2xpcHBlci0+YXBwbHlDbGlwKGJvdW5kaW5nQm94KTsK
LSAgICAKKwogICAgIGlmIChTVkdSZXNvdXJjZU1hc2tlciogbWFza2VyID0gZ2V0TWFza2VyQnlJ
ZChvYmplY3QtPmRvY3VtZW50KCksIHN2Z1N0eWxlLT5tYXNrRWxlbWVudCgpLnN1YnN0cmluZygx
KSkpCiAgICAgICAgIG1hc2tlci0+YXBwbHlNYXNrKGJvdW5kaW5nQm94KTsKLSAgICAKKwogICAg
IEtDYW52YXNGaWx0ZXIqIGZpbHRlciA9IGdldEZpbHRlckJ5SWQob2JqZWN0LT5kb2N1bWVudCgp
LCBzdmdTdHlsZS0+ZmlsdGVyKCkuc3Vic3RyaW5nKDEpKTsKICAgICBpZiAoZmlsdGVyKQogICAg
ICAgICBmaWx0ZXItPnByZXBhcmVGaWx0ZXIoYm91bmRpbmdCb3gpOwotICAgIAorCiAgICAgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8gcGkgPSBwYWludEluZm87CiAgICAgT3duUHRyPEdyYXBoaWNz
Q29udGV4dD4gYyhkZXZpY2UtPmN1cnJlbnRDb250ZXh0KCktPmNyZWF0ZUdyYXBoaWNzQ29udGV4
dCgpKTsKLSAgICBwaS5wID0gYy5nZXQoKTsKKyAgICBwaS5jb250ZXh0ID0gYy5nZXQoKTsKICAg
ICBpZiAoIWZsb3ctPmlzUm9vdElubGluZUJveCgpKQotICAgICAgICBwaS5yID0gKG9iamVjdC0+
bG9jYWxUcmFuc2Zvcm0oKSkuaW52ZXJ0KCkubWFwUmVjdChwYWludEluZm8ucik7Ci0gICAgCisg
ICAgICAgIHBpLnJlY3QgPSAob2JqZWN0LT5sb2NhbFRyYW5zZm9ybSgpKS5pbnZlcnQoKS5tYXBS
ZWN0KHBhaW50SW5mby5yZWN0KTsKKwogICAgIGZsb2F0IG9wYWNpdHkgPSBvYmplY3QtPnN0eWxl
KCktPm9wYWNpdHkoKTsKICAgICBpZiAob3BhY2l0eSA8IDEuMGYpIHsKICAgICAgICAgYy0+Y2xp
cChlbmNsb3NpbmdJbnRSZWN0KGJvdW5kaW5nQm94KSk7CkBAIC0xMjAsMTYgKzExOSwxNiBAQCB2
b2lkIHBhaW50U1ZHSW5saW5lRmxvdyhJbmxpbmVGbG93Qm94KiBmCiAgICAgICAgIH0KICAgICAg
ICAgc3Ryb2tlUGFpbnRTZXJ2ZXItPnNldFBhaW50aW5nVGV4dChmYWxzZSk7CiAgICAgfQotICAg
IAorCiAgICAgaWYgKGZpbHRlcikgCiAgICAgICAgIGZpbHRlci0+YXBwbHlGaWx0ZXIoYm91bmRp
bmdCb3gpOwotICAgIAorCiAgICAgaWYgKG9wYWNpdHkgPCAxLjBmKQogICAgICAgICBjLT5lbmRU
cmFuc3BhcmVuY3lMYXllcigpOwogCiAgICAgLy8gcmVzdG9yZSBkcmF3aW5nIHN0YXRlCiAgICAg
aWYgKCFzaG91bGRQb3BDb250ZXh0KQotICAgICAgICBwYWludEluZm8ucC0+cmVzdG9yZSgpOwor
ICAgICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogICAgIGVsc2UgewogICAgICAg
ICBkZXZpY2UtPnBvcENvbnRleHQoKTsKICAgICAgICAgZGVsZXRlIGNvbnRleHQ7Cg==
</data>
<flag name="review"
          id="3931"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>