<?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>99254</bug_id>
          
          <creation_ts>2012-10-13 12:40:49 -0700</creation_ts>
          <short_desc>Make ScrollingTree an actual tree of nodes, and have it reflect the ScrollingStateTree</short_desc>
          <delta_ts>2012-10-16 13:17:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>jamesr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>741515</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-13 12:40:49 -0700</bug_when>
    <thetext>It&apos;s time to make the ScrollingTree capable of creating more than one node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741517</commentid>
    <comment_count>1</comment_count>
      <attachid>168563</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-13 13:00:42 -0700</bug_when>
    <thetext>Created attachment 168563
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741518</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-13 13:02:49 -0700</bug_when>
    <thetext>Attachment 168563 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/page/scrolling/ScrollingTree.cpp:167:  Local variables should never be PassOwnPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741519</commentid>
    <comment_count>3</comment_count>
      <attachid>168564</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-13 13:13:50 -0700</bug_when>
    <thetext>Created attachment 168564
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743264</commentid>
    <comment_count>4</comment_count>
      <attachid>168564</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-10-16 10:33:56 -0700</bug_when>
    <thetext>Comment on attachment 168564
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=168564&amp;action=review

I&apos;m starting to get nervous that none of this is covered by LayoutTests, and we&apos;ve already had a couple of crashes in this code. I strongly suggest figuring out how to test this.

&gt; Source/WebCore/page/scrolling/ScrollingTree.cpp:147
&gt; +void ScrollingTree::updateNodesFromStateNode(ScrollingStateNode* stateNode)

I&apos;d call this updateTreeFromStateNode to make it clearer that it consults stateNode and its children.

&gt; Source/WebCore/page/scrolling/ScrollingTree.cpp:151
&gt; +    HashMap&lt;ScrollingNodeID, ScrollingTreeNode*&gt;::const_iterator it = m_nodeMap.find(stateNode-&gt;scrollingNodeID());

You should make a typedef for HashMap&lt;ScrollingNodeID, ScrollingTreeNode*&gt;

&gt; Source/WebCore/page/scrolling/ScrollingTree.cpp:175
&gt; +            HashMap&lt;ScrollingNodeID, ScrollingTreeNode*&gt;::const_iterator it = m_nodeMap.find(stateNode-&gt;parent()-&gt;scrollingNodeID());
&gt; +            if (it != m_nodeMap.end()) {
&gt; +                ScrollingTreeNode* parent = it-&gt;value;
&gt; +                newNode-&gt;setParent(parent);
&gt; +                parent-&gt;appendChild(newNode.release());
&gt; +            }

If we don&apos;t find the parent, what then? Is that an error? Should it assert?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743375</commentid>
    <comment_count>5</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-16 11:47:40 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 168564 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168564&amp;action=review
&gt; 
&gt; I&apos;m starting to get nervous that none of this is covered by LayoutTests, and we&apos;ve already had a couple of crashes in this code. I strongly suggest figuring out how to test this.
&gt; 

Yes, I do agree. I know Tim has a goal to get threaded scrolling turned on on a bot, and I have been holding out for that…but I agree, with the crashes, that is turning into a dubious strategy. 

&gt; &gt; Source/WebCore/page/scrolling/ScrollingTree.cpp:147
&gt; &gt; +void ScrollingTree::updateNodesFromStateNode(ScrollingStateNode* stateNode)
&gt; 
&gt; I&apos;d call this updateTreeFromStateNode to make it clearer that it consults stateNode and its children.
&gt; 

Fixed.

&gt; &gt; Source/WebCore/page/scrolling/ScrollingTree.cpp:151
&gt; &gt; +    HashMap&lt;ScrollingNodeID, ScrollingTreeNode*&gt;::const_iterator it = m_nodeMap.find(stateNode-&gt;scrollingNodeID());
&gt; 
&gt; You should make a typedef for HashMap&lt;ScrollingNodeID, ScrollingTreeNode*&gt;
&gt; 

Okay!

&gt; &gt; Source/WebCore/page/scrolling/ScrollingTree.cpp:175
&gt; &gt; +            HashMap&lt;ScrollingNodeID, ScrollingTreeNode*&gt;::const_iterator it = m_nodeMap.find(stateNode-&gt;parent()-&gt;scrollingNodeID());
&gt; &gt; +            if (it != m_nodeMap.end()) {
&gt; &gt; +                ScrollingTreeNode* parent = it-&gt;value;
&gt; &gt; +                newNode-&gt;setParent(parent);
&gt; &gt; +                parent-&gt;appendChild(newNode.release());
&gt; &gt; +            }
&gt; 
&gt; If we don&apos;t find the parent, what then? Is that an error? Should it assert?

Yes, I think an assert is appropriate. I will add one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743468</commentid>
    <comment_count>6</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-16 13:17:10 -0700</bug_when>
    <thetext>Committed change: http://trac.webkit.org/changeset/131490</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168563</attachid>
            <date>2012-10-13 13:00:42 -0700</date>
            <delta_ts>2012-10-13 13:13:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>87836</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTI2MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOSBAQAorMjAxMi0xMC0xMyAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk5MjU0CisgICAgICAgIE1ha2UgU2Nyb2xsaW5nVHJlZSBhbiBh
Y3R1YWwgdHJlZSBvZiBub2RlcywgYW5kIGhhdmUgaXQgcmVmbGVjdCB0aGUgCisgICAgICAgIFNj
cm9sbGluZ1N0YXRlVHJlZQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggZmluYWxseSBtYWtlcyB0aGUgU2Nyb2xsaW5nVHJlZSBvdmVy
IG9uIHRoZSAKKyAgICAgICAgU2Nyb2xsaW5nVGhyZWFkIGF3YXJlIG9mIHRoZSBjaGFuZ2VzIHRo
YXQgd2UgaGF2ZSBiZWVuIG1ha2luZyB0byB0aGUgCisgICAgICAgIFNjcm9sbGluZ1N0YXRlVHJl
ZS4KKworICAgICAgICBGaXJzdCwgaXQgbWFrZXMgU2Nyb2xsaW5nVHJlZU5vZGUgYSBtdWNoIG1v
cmUgZ2VuZXJpYyBjbGFzcywgc2ltaWxhciAKKyAgICAgICAgdG8gU2Nyb2xsaW5nU3RhdGVOb2Rl
LiBJdCBpcyBhbiBhYnN0cmFjdCBjbGFzcyBhbmQgd2Ugd2lsbCBhZGQgb3RoZXIgCisgICAgICAg
IHR5cGVzIG9mIG5vZGVzIHN1Y2ggYXMgU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZXMgdGhhdCB3aWxs
IGluaGVyaXQgZnJvbSAKKyAgICAgICAgdGhpcyBjbGFzcy4gCisKKyAgICAgICAgQWxsIG9mIHRo
ZSBzY3JvbGxpbmcgZnVuY3Rpb25hbGl0eSB0aGF0IHdhcyBpbiBTY3JvbGxpbmdUcmVlTm9kZSBo
YXMgCisgICAgICAgIGJlZW4gbW92ZWQgdG8gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuIEFu
ZCBsaWtld2lzZSwgCisgICAgICAgIFNjcm9sbGluZ1RyZWVOb2RlTWFjIGhhcyBiZWVuIHJlLW5h
bWVkIHRvIAorICAgICAgICBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy4gCisKKyAgICAg
ICAgQW5kIGZpbmFsbHksIGluc3RlYWQgb2YganVzdCB1cGRhdGluZyBhbmQgY3JlYXRpbmcgdGhl
IHJvb3Qgbm9kZSwgCisgICAgICAgIFNjcm9sbGluZ1RyZWUgbm93IHJlY3Vyc2VzIHRocm91Z2gg
dGhlIHdob2xlIFNjcm9sbGluZ1N0YXRlVHJlZSB0byAKKyAgICAgICAgY3JlYXRlIGFuZCB1cGRh
dGUgYSBmdWxsIHRyZWUgb2Ygbm9kZXMuCisKKyAgICAgICAgTmV3IGZpbGVzIGFuZCBtb3ZlcyBm
aWxlcy4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAg
ICAgICAgQWRkIGEgZ2V0dGVyIGZvciB0aGUgY2hpbGRyZW4gdmVjdG9yIHNpbmNlIHdlIG5lZWQg
dG8gcmVjdXJzZSBpdCBpbiAKKyAgICAgICAgU2Nyb2xsaW5nVHJlZS4KKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ1N0YXRlTm9kZTo6Y2hpbGRyZW4pOgorICAgICAgICAoU2Nyb2xsaW5nU3RhdGVOb2RlKToK
KworICAgICAgICBtX3Jvb3ROb2RlIGlzIG5vdyBhIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
LgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nVHJlZTo6U2Nyb2xsaW5nVHJlZSk6CisKKyAgICAgICAgSW5zdGVh
ZCBvZiBqdXN0IHVwZGF0aW5nIHRoZSByb290IG5vZGUsIGNhbGwgdHdvIG5ldyBmdW5jdGlvbnMg
dGhhdCAKKyAgICAgICAgd2lsbCB0YWtlIGNhcmUgb2YgdXBkYXRpbmcgdGhlIHdob2xlIHRyZWUu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlOjpjb21taXROZXdUcmVlU3RhdGUpOgor
CisgICAgICAgIFRoaXMgZnVuY3Rpb24gZWN1cnNlcyB0aHJvdWdoIHRoZSBTY3JvbGxpbmdTdGF0
ZVRyZWUgYW5kIHVwZGF0ZXMgdGhlIAorICAgICAgICBjb3JyZXNwb25kaW5nIFNjcm9sbGluZ1Ry
ZWVOb2Rlcy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWU6OnVwZGF0ZU5vZGVzRnJv
bVN0YXRlTm9kZSk6CisKKyAgICAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgU2Nyb2xsaW5n
U3RhdGVUcmVlJ3MgbGlzdCBvZiByZW1vdmVkIG5vZGVzIAorICAgICAgICBhbmQgcmVtb3ZlcyB0
aGUgY29ycmVzcG9uZGluZyBub2RlcyBmcm9tIHRoZSBTY3JvbGxpbmdUcmVlLiBJdCB3aWxsIAor
ICAgICAgICBkZXN0cm95IHRoZSBub2RlcyBhZnRlciByZW1vdmluZyBpdCBhcyBsb25nIGFzIGl0
J3Mgbm90IHRoZSByb290IAorICAgICAgICBub2RlLiBJIHRoaW5rIGl0J3MgdGhlIHNhZmVzdCBj
aG9pY2UgZm9yIG5vdyB0byBuZXZlciByZW1vdmUgdGhlIHJvb3QgCisgICAgICAgIG5vZGUuIAor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZTo6cmVtb3ZlRGVzdHJveWVkTm9kZXMpOgor
CisgICAgICAgIFNjcm9sbGluZ1RyZWUgbm93IGtlZXBzIGEgSGFzaE1hcCBtYXBwaW5nIFNjcm9s
bGluZ05vZGVJRHMgdG8gCisgICAgICAgIFNjcm9sbGluZ1RyZWVOb2Rlcy4KKyAgICAgICAgKiBw
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmg6CisKKyAgICAgICAgQWxsIG9mIHRoZSBzY3Jv
bGxpbmctcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIG1vdmVkIGZyb20gdGhpcyAKKyAg
ICAgICAgY2xhc3MgdG8gbmV3IGNsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLiBBbmQg
c29tZSBiYXNpYyB0cmVlIAorICAgICAgICB0cmF2ZXJzYWwgZnVuY3Rpb25hbGl0eSBoYXMgYmVl
biBhZGRlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9kZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlTm9kZTo6U2Nyb2xsaW5nVHJlZU5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZU5vZGU6OmFwcGVuZENoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVOb2RlOjpyZW1vdmVDaGlsZCk6CisgICAgICAg
ICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoU2Nyb2xsaW5nVHJlZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nVHJlZU5vZGU6OnNjcm9sbGluZ05vZGVJRCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdUcmVlTm9kZTo6c2V0U2Nyb2xsaW5nTm9kZUlEKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ1RyZWVOb2RlOjpwYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZU5v
ZGU6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlTm9kZTo6c2Ny
b2xsaW5nVHJlZSk6CisKKyAgICAgICAgVGhpcyBjbGFzcyBjb250YWlucyBhbGwgb2YgdGhlIHNj
cm9sbGluZy1yZWxhdGVkIHdvcmsgdGhhdCB1c2VkIHRvIGJlIAorICAgICAgICBkb25lIGluIFNj
cm9sbGluZ1RyZWVOb2RlLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6flNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlOjp1cGRhdGUpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6c2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9u
TWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZTo6dmlld3BvcnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlOjpjb250ZW50c1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGU6Omhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjp2ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6Omhhc0VuYWJs
ZWRIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlOjpoYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OmNhbkhhdmVTY3JvbGxiYXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjpzY3JvbGxPcmlnaW4p
OgorCisgICAgICAgIEkgbm90aWNlZCB0aGlzIHdoaXRlc3BhY2UgZXJyb3IgYW5kIGhhZCB0byBm
aXggaXQuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmRldGFj
aEZyb21TdGF0ZVRyZWUpOgorCisgICAgICAgIEluY2x1ZGUgU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVNYWMuaCBpbnN0ZWFkIG9mIAorICAgICAgICBTY3JvbGxpbmdUcmVlTm9kZU1hYy5oCisg
ICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVNYWMubW06CisKKyAgICAg
ICAgVGhpcyBjbGFzcyB3YXMganVzdCByZS1uYW1lZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nVHJlZU5vZGVNYWMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU5vZGVNYWMubW06IFJlbW92ZWQuCisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLmg6IENvcGll
ZCBmcm9tIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlTm9kZU1hYy5oLgorICAgICAg
ICAoU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xs
aW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbTogQ29waWVkIGZyb20gcGFn
ZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVOb2RlTWFjLm1tLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVNYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6
On5TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjphbGxvd3NIb3Jpem9udGFs
U3RyZXRjaGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZU1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpzdHJldGNoQW1vdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpwaW5uZWRJbkRpcmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6Y2FuU2Nyb2xs
SG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlTWFjOjpjYW5TY3JvbGxWZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OmFic29sdXRlU2Ny
b2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlTWFjOjppbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNv
bnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
TWFjOjpzdGFydFNuYXBSdWJiZXJiYW5kVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OnN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpzY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6c2V0
U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVNYWM6OnNldFNjcm9sbFBvc2l0aW9uV2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OnNldFNj
cm9sbExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVNYWM6Om1pbmltdW1TY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpzY3JvbGxCeSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6c2Nyb2xs
QnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6dXBkYXRlTWFpbkZyYW1lUGluU3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OmxvZ0V4cG9zZWRV
bmZpbGxlZEFyZWEpOgorCiAyMDEyLTEwLTEzICBDaHJpcyBSb2dlcnMgIDxjcm9nZXJzQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgV2ViQXVkaW9CdXMgbmVlZHMgc3VwcG9ydCBmb3IgcmVzaXppbmcg
YnVzIHRvIGEgc21hbGxlciBzaXplCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzEyNjIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTUwOCw4ICs1MDgsNiBAQAogCQkxQUFBRERBNDE0REI0MDlGMDBBRjY0QjMgLyogU2Nyb2xs
aW5nVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFBQUREQTIxNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQUFBRERFMzE0REM4QzhGMDBB
RjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBQURERTExNERDOEM4RjAwQUY2NEIzIC8qIFNjcm9sbGlu
Z1RyZWVOb2RlLmNwcCAqLzsgfTsKIAkJMUFBQURERTQxNERDOEM4RjAwQUY2NEIzIC8qIFNjcm9s
bGluZ1RyZWVOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQUFBRERFMjE0REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuaCAqLzsg
fTsKLQkJMUFBQURERTgxNERDOERGODAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlTWFjLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBQURERTYx
NERDOERGODAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlTWFjLm1tICovOyB9OwotCQkxQUFB
RERFOTE0REM4REY4MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGVNYWMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUFEREU3MTREQzhERjgwMEFG
NjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZU1hYy5oICovOyB9OwogCQkxQUIxQUU3QTBDMDUxRkRF
MDAxMzlGNEYgLyogem9vbUluQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUFCMUFFNzgwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21JbkN1
cnNvci5wbmcgKi87IH07CiAJCTFBQjFBRTdCMEMwNTFGREUwMDEzOUY0RiAvKiB6b29tT3V0Q3Vy
c29yLnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFCMUFFNzkwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21PdXRDdXJzb3IucG5nICovOyB9OwogCQkx
QUIzM0RBNTEyNTUxRTMyMDAyNDQ1N0EgLyogSU9LaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3Mg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFCMzNEQTQxMjU1MUUzMjAwMjQ0
NTdBIC8qIElPS2l0LmZyYW1ld29yayAqLzsgfTsKQEAgLTMyODksNiArMzI4Nyw4IEBACiAJCTkz
OEU2NjYwMDlGMDlCODEwMDhBNDhFQyAvKiBKU0hUTUxDYW52YXNFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOEU2NjVGMDlGMDlCODEw
MDhBNDhFQyAvKiBKU0hUTUxDYW52YXNFbGVtZW50LmNwcCAqLzsgfTsKIAkJOTM4RTY2NjIwOUYw
OUI4NzAwOEE0OEVDIC8qIEpTSFRNTENhbnZhc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOEU2NjYxMDlGMDlCODcwMDhBNDhFQyAvKiBK
U0hUTUxDYW52YXNFbGVtZW50LmggKi87IH07CiAJCTkzOTFBOTkxMTYyNzQ2Q0IwMDI5NzMzMCAv
KiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTM5MUE5OTAxNjI3NDZDQjAwMjk3MzMwIC8qIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjLmggKi87IH07CisJCTkzOTFBOTlDMTYyOUQ3MDAwMDI5NzMzMCAvKiBTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MzkxQTk5QTE2MjlENkZGMDAyOTczMzAgLyogU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGUuY3BwICovOyB9OworCQk5MzkxQTk5RDE2MjlENzAwMDAyOTczMzAgLyog
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTFBOTlCMTYyOUQ3MDAwMDI5NzMzMCAvKiBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZS5oICovOyB9OwogCQk5MzkyMjYyRDEwMzIxMDdCMDA2RTdENUQgLyog
SlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzkyMjYyQzEwMzIxMDdCMDA2RTdENUQgLyogSlNIVE1MQ2Fu
dmFzRWxlbWVudEN1c3RvbS5jcHAgKi87IH07CiAJCTkzOTIyNjJGMTAzMjEwODQwMDZFN0Q1RCAv
KiBKU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzOTIyNjJFMTAzMjEwODQwMDZFN0Q1RCAvKiBKU0NTU1J1bGVMaXN0
Q3VzdG9tLmNwcCAqLzsgfTsKIAkJOTM5MkYxNDIwQUQxODVGNDAwNjkxQkQ0IC8qIFJlbmRlckNv
dW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
OTJGMTQxMEFEMTg1RjQwMDY5MUJENCAvKiBSZW5kZXJDb3VudGVyLmggKi87IH07CkBAIC0zMzIz
LDYgKzMzMjMsOCBAQAogCQk5M0MwOUE4MTBCMDY0RjAwMDA1QUJENEQgLyogRXZlbnRIYW5kbGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQzA5
QTgwMEIwNjRGMDAwMDVBQkQ0RCAvKiBFdmVudEhhbmRsZXIuY3BwICovOyB9OwogCQk5M0MwOUM4
NjBCMDY1N0FBMDA1QUJENEQgLyogU2Nyb2xsVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQzA5Qzg1MEIwNjU3QUEwMDVBQkQ0RCAvKiBTY3Jv
bGxUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTkzQzQ0MjAwMEY4MTNBRTEwMEMxQTYzNCAvKiBDb2xsZWN0aW9uVHlwZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNDNDQxRkYwRjgxM0FFMTAw
QzFBNjM0IC8qIENvbGxlY3Rpb25UeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTNDNEE0MTUxNjI5REY1QTAwQzNFQjZFIC8qIFNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0M0QTQxMzE2MjlERjVBMDBDM0VCNkUgLyogU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVNYWMuaCAqLzsgfTsKKwkJOTNDNEE0MTYxNjI5REY1QTAwQzNFQjZFIC8qIFNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNDNEE0MTQxNjI5REY1QTAwQzNFQjZFIC8qIFNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tICovOyB9OwogCQk5M0M0RjZFQjExMDhGOUE1MDA5OUQw
REIgLyogQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNDNEY2RTkxMTA4RjlBNTAwOTlEMERCIC8qIEFjY2Vzc2li
aWxpdHlTY3JvbGxiYXIuaCAqLzsgfTsKIAkJOTNDODQxRjgwOUNFODU1QzAwREZGNUU1IC8qIERP
TUltcGxlbWVudGF0aW9uRnJvbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzQzg0MUY3MDlDRTg1NUMwMERGRjVFNSAvKiBET01JbXBsZW1lbnRhdGlv
bkZyb250LmggKi87IH07CiAJCTkzQzg0MUZGMDlDRTg1ODMwMERGRjVFNSAvKiBET01JbXBsZW1l
bnRhdGlvbkZyb250LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzQzg0MUZFMDlDRTg1ODMwMERGRjVFNSAvKiBET01JbXBsZW1lbnRhdGlvbkZyb250
LmNwcCAqLzsgfTsKQEAgLTc1OTAsOCArNzU5Miw2IEBACiAJCTFBQUFEREEyMTREQjQwOUYwMEFG
NjRCMyAvKiBTY3JvbGxpbmdUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNjcm9sbGluZ1RyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBQURERTEx
NERDOEM4RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGluZ1RyZWVOb2RlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUFBQURERTIxNERDOEM4RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1Ry
ZWVOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ1RyZWVO
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQUFEREU2MTREQzhERjgwMEFG
NjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFNjcm9sbGluZ1RyZWVOb2RlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxQUFBRERFNzE0REM4REY4MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5v
ZGVNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsaW5nVHJlZU5v
ZGVNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFCMUFFNzgwQzA1MUZERTAw
MTM5RjRGIC8qIHpvb21JbkN1cnNvci5wbmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS5wbmc7IHBhdGggPSB6b29tSW5DdXJzb3IucG5nOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUIxQUU3OTBDMDUxRkRFMDAxMzlGNEYgLyog
em9vbU91dEN1cnNvci5wbmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBpbWFnZS5wbmc7IHBhdGggPSB6b29tT3V0Q3Vyc29yLnBuZzsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFCMzNEQTQxMjU1MUUzMjAwMjQ0NTdBIC8qIElPS2l0LmZy
YW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gSU9LaXQuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3Rl
bS9MaWJyYXJ5L0ZyYW1ld29ya3MvSU9LaXQuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNv
bHV0ZT4iOyB9OwpAQCAtMTA0OTEsNiArMTA0OTEsOCBAQAogCQk5MzhFNjY1RjA5RjA5QjgxMDA4
QTQ4RUMgLyogSlNIVE1MQ2FudmFzRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0hUTUxDYW52YXNFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTM4RTY2NjEwOUYwOUI4NzAwOEE0OEVDIC8qIEpTSFRNTENhbnZhc0VsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MQ2FudmFzRWxlbWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzkxQTk5MDE2Mjc0NkNCMDAyOTcz
MzAgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTM5MUE5OUExNjI5RDZGRjAwMjk3MzMwIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTM5
MUE5OUIxNjI5RDcwMDAwMjk3MzMwIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzOTIyNjJDMTAzMjEwN0IwMDZFN0Q1
RCAvKiBKU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5MzkyMjYyRTEwMzIxMDg0MDA2RTdENUQgLyogSlNDU1NSdWxl
TGlzdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NT
U1J1bGVMaXN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM5MkYx
NDEwQUQxODVGNDAwNjkxQkQ0IC8qIFJlbmRlckNvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbmRlckNvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEwNTI3LDYgKzEwNTI5LDggQEAKIAkJOTNDMDlBODAwQjA2NEYwMDAwNUFCRDREIC8q
IEV2ZW50SGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBF
dmVudEhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0MwOUM4NTBC
MDY1N0FBMDA1QUJENEQgLyogU2Nyb2xsVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2Nyb2xsVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTND
NDQxRkYwRjgxM0FFMTAwQzFBNjM0IC8qIENvbGxlY3Rpb25UeXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvbGxlY3Rpb25UeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTkzQzRBNDEzMTYyOURGNUEwMEMzRUI2RSAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0M0
QTQxNDE2MjlERjVBMDBDM0VCNkUgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNDNEY2RTkx
MTA4RjlBNTAwOTlEMERCIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5M0M4NDFGNzA5Q0U4NTVDMDBERkY1RTUgLyogRE9NSW1wbGVt
ZW50YXRpb25Gcm9udC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01JbXBs
ZW1lbnRhdGlvbkZyb250Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQzg0MUZF
MDlDRTg1ODMwMERGRjVFNSAvKiBET01JbXBsZW1lbnRhdGlvbkZyb250LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTUltcGxlbWVudGF0aW9uRnJvbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ2MDQsNiArMTQ2MDgsOCBAQAogCQkJCTFB
QUFEREEyMTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmggKi8sCiAJCQkJMUFBQURE
RTExNERDOEM4RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlLmNwcCAqLywKIAkJCQkxQUFB
RERFMjE0REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuaCAqLywKKwkJCQk5Mzkx
QTk5QTE2MjlENkZGMDAyOTczMzAgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwICov
LAorCQkJCTkzOTFBOTlCMTYyOUQ3MDAwMDI5NzMzMCAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBzY3JvbGxpbmc7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtMTQ2MTYsOCArMTQ2MjIsOCBAQAogCQkJCTkzMUNCRDEyMTYxQTQ0Rjgw
MEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0ZU5vZGVNYWMubW0gKi8sCiAJCQkJMUFGNjJGMjMxNERB
RkU5MTAwNDE1NTZDIC8qIFNjcm9sbGluZ1RocmVhZE1hYy5tbSAqLywKIAkJCQkxQTM1ODYyQTE1
MjUyMjU0MDAyMkE2NTkgLyogU2Nyb2xsaW5nVHJlZU1hYy5tbSAqLywKLQkJCQkxQUFBRERFNzE0
REM4REY4MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGVNYWMuaCAqLywKLQkJCQkxQUFBRERF
NjE0REM4REY4MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGVNYWMubW0gKi8sCisJCQkJOTND
NEE0MTMxNjI5REY1QTAwQzNFQjZFIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLmgg
Ki8sCisJCQkJOTNDNEE0MTQxNjI5REY1QTAwQzNFQjZFIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlTWFjLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtMjQ5MTgsNyArMjQ5MjQsNiBAQAogCQkJCTFBRjYyRjI2MTREQUZFQTEw
MDQxNTU2QyAvKiBTY3JvbGxpbmdUaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQUFEREE0
MTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QUFBRERFNDE0REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTFBQUFEREU5MTREQzhERjgwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZU1h
Yy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNDMDlDODYwQjA2NTdBQTAwNUFCRDREIC8qIFNjcm9s
bFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzZENkUyNjA5QUY5NDM1MDBGNTk3NTkgLyog
U2Nyb2xsVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNERDIxMjUxRjEyRDAwM0VGMjY5
IC8qIFNlYXJjaElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTU5OCw2ICsyNTYwMyw4
IEBACiAJCQkJNTE0QkM4NDMxNjFDRjA1QzAwNEQ1MkY0IC8qIFJlc291cmNlQnVmZmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1NzI4QkQ5RTE2MjUzNjk2MDBDNDBCNTYgLyogU2libGluZ1RyYXZl
cnNhbFN0cmF0ZWdpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTFBOTkxMTYyNzQ2Q0IwMDI5
NzMzMCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTM5
MUE5OUQxNjI5RDcwMDAwMjk3MzMwIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk5M0M0QTQxNTE2MjlERjVBMDBDM0VCNkUgLyogU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjgxNDYsNyArMjgxNTMsNiBA
QAogCQkJCTFBQUFEREEzMTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBMzU4NjJDMTUyNTIyNTQwMDIyQTY1OSAvKiBTY3JvbGxpbmdUcmVl
TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBQURERTMxNERDOEM4RjAwQUY2NEIzIC8qIFNj
cm9sbGluZ1RyZWVOb2RlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFBQUFEREU4MTREQzhERjgw
MEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJD
MjQ0MUM0MEU4QjY1RDAwMDU1MzIwRiAvKiBTY3JvbGxWaWV3LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTkzNTM2NzZCMDlBRUQ4OEIwMEQzNUNENiAvKiBTY3JvbGxWaWV3TWFjLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRjU1QjNERDExMjUxRjEyRDAwM0VGMjY5IC8qIFNlYXJjaElucHV0VHlwZS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTI4NzAyLDYgKzI4NzA4LDggQEAKIAkJCQkzMTk1NUE4NjE2
MEQxOTkwMDA4NTgwMjUgLyogUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTE0QkM4M0YxNjFDRjA0QTAwNEQ1MkY0IC8qIFJlc291cmNlQnVmZmVyLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTE0QkM4NDIxNjFDRjA1QzAwNEQ1MkY0IC8qIFJlc291cmNlQnVm
ZmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzOTFBOTlDMTYyOUQ3MDAwMDI5NzMzMCAvKiBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5M0M0QTQx
NjE2MjlERjVBMDBDM0VCNkUgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0gaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1N0YXRlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1N0YXRlTm9kZS5oCShyZXZpc2lvbiAxMzEyNjIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NzQsOCArNzQsOSBAQCBwdWJsaWM6CiAgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBwYXJlbnQoKSBj
b25zdCB7IHJldHVybiBtX3BhcmVudDsgfQogICAgIHZvaWQgc2V0UGFyZW50KFNjcm9sbGluZ1N0
YXRlTm9kZSogcGFyZW50KSB7IG1fcGFyZW50ID0gcGFyZW50OyB9CiAKLSAgICB2b2lkIGFwcGVu
ZENoaWxkKFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPik7CisgICAgVmVjdG9yPE93blB0
cjxTY3JvbGxpbmdTdGF0ZU5vZGU+ID4qIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGls
ZHJlbi5nZXQoKTsgfQogCisgICAgdm9pZCBhcHBlbmRDaGlsZChQYXNzT3duUHRyPFNjcm9sbGlu
Z1N0YXRlTm9kZT4pOwogICAgIHZvaWQgcmVtb3ZlQ2hpbGQoU2Nyb2xsaW5nU3RhdGVOb2RlKik7
CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1RyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWUuY3BwCShyZXZpc2lvbiAxMzEyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiAr
MzMsNyBAQAogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgogI2luY2x1ZGUgIlNjcm9s
bGluZ1RocmVhZC5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVOb2RlLmgiCisjaW5jbHVkZSAi
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgogI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KIApAQCAtNDUsNyArNDYsNyBAQCBQ
YXNzUmVmUHRyPFNjcm9sbGluZ1RyZWU+IFNjcm9sbGluZ1RyZWU6CiAKIFNjcm9sbGluZ1RyZWU6
OlNjcm9sbGluZ1RyZWUoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
KQogICAgIDogbV9zY3JvbGxpbmdDb29yZGluYXRvcihzY3JvbGxpbmdDb29yZGluYXRvcikKLSAg
ICAsIG1fcm9vdE5vZGUoU2Nyb2xsaW5nVHJlZU5vZGU6OmNyZWF0ZSh0aGlzKSkKKyAgICAsIG1f
cm9vdE5vZGUoU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OmNyZWF0ZSh0aGlzKSkKICAgICAs
IG1faGFzV2hlZWxFdmVudEhhbmRsZXJzKGZhbHNlKQogICAgICwgbV9jYW5Hb0JhY2soZmFsc2Up
CiAgICAgLCBtX2NhbkdvRm9yd2FyZChmYWxzZSkKQEAgLTEzNywxMSArMTM4LDY3IEBAIHZvaWQg
U2Nyb2xsaW5nVHJlZTo6Y29tbWl0TmV3VHJlZVN0YXRlKFAKICAgICAKICAgICBUZW1wb3JhcnlD
aGFuZ2U8Ym9vbD4gY2hhbmdlSGFuZGxpbmdQcm9ncmFtbWF0aWNTY3JvbGwobV9pc0hhbmRsaW5n
UHJvZ3JhbW1hdGljU2Nyb2xsLCBzY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+
cmVxdWVzdGVkU2Nyb2xsUG9zaXRpb25SZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKCkpOwog
Ci0gICAgbV9yb290Tm9kZS0+dXBkYXRlKHNjcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9k
ZSgpKTsKKyAgICByZW1vdmVEZXN0cm95ZWROb2RlcyhzY3JvbGxpbmdTdGF0ZVRyZWUuZ2V0KCkp
OworICAgIHVwZGF0ZU5vZGVzRnJvbVN0YXRlTm9kZShzY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RT
dGF0ZU5vZGUoKSk7CiAKICAgICB1cGRhdGVEZWJ1Z1Jvb3RMYXllcigpOwogfQogCit2b2lkIFNj
cm9sbGluZ1RyZWU6OnVwZGF0ZU5vZGVzRnJvbVN0YXRlTm9kZShTY3JvbGxpbmdTdGF0ZU5vZGUq
IHN0YXRlTm9kZSkKK3sKKyAgICAvLyBUaGlzIGZ1Y3Rpb24gcmVjdXJzZXMgdGhyb3VnaCB0aGUg
U2Nyb2xsaW5nU3RhdGVUcmVlIGFuZCB1cGRhdGVzIHRoZSBjb3JyZXNwb25kaW5nIFNjcm9sbGlu
Z1RyZWVOb2Rlcy4KKyAgICAvLyBGaW5kIHRoZSBTY3JvbGxpbmdUcmVlTm9kZSBhc3NvY2lhdGVk
IHdpdGggdGhlIGN1cnJlbnQgc3RhdGVOb2RlIHVzaW5nIHRoZSBzaGFyZWQgSUQgYW5kIG91ciBI
YXNoTWFwLgorICAgIEhhc2hNYXA8U2Nyb2xsaW5nTm9kZUlELCBTY3JvbGxpbmdUcmVlTm9kZSo+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fbm9kZU1hcC5maW5kKHN0YXRlTm9kZS0+c2Nyb2xsaW5n
Tm9kZUlEKCkpOworCisgICAgaWYgKGl0ICE9IG1fbm9kZU1hcC5lbmQoKSkgeworICAgICAgICBT
Y3JvbGxpbmdUcmVlTm9kZSogbm9kZSA9IGl0LT52YWx1ZTsKKyAgICAgICAgbm9kZS0+dXBkYXRl
KHN0YXRlTm9kZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgdGhlIG5vZGUgaXNuJ3Qg
Zm91bmQsIGl0J3MgZWl0aGVyIG5ldyBhbmQgbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIHRyZWUs
IG9yIHRoZXJlIGlzIGEgbmV3IElEIGZvciBvdXIKKyAgICAgICAgLy8gcm9vdCBub2RlLgorICAg
ICAgICBpZiAoIXN0YXRlTm9kZS0+cGFyZW50KCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMg
dGhlIHJvb3Qgbm9kZS4KKyAgICAgICAgICAgIG1fcm9vdE5vZGUtPnNldFNjcm9sbGluZ05vZGVJ
RChzdGF0ZU5vZGUtPnNjcm9sbGluZ05vZGVJRCgpKTsKKyAgICAgICAgICAgIG1fbm9kZU1hcC5z
ZXQoc3RhdGVOb2RlLT5zY3JvbGxpbmdOb2RlSUQoKSwgbV9yb290Tm9kZS5nZXQoKSk7CisgICAg
ICAgICAgICBtX3Jvb3ROb2RlLT51cGRhdGUoc3RhdGVOb2RlKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB3ZSB3aWxsIGhhdmUgbW9yZSB0
aGFuIGp1c3QgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUsIHNvIHdlJ2xsIGhhdmUgdG8KKyAg
ICAgICAgICAgIC8vIGZpZ3VyZSBvdXQgd2hpY2ggdHlwZSBvZiBub2RlIHRvIGNyZWF0ZS4KKyAg
ICAgICAgICAgIFBhc3NPd25QdHI8U2Nyb2xsaW5nVHJlZU5vZGU+IG5ld05vZGUgPSBTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZTo6Y3JlYXRlKHRoaXMpOworICAgICAgICAgICAgbV9ub2RlTWFw
LnNldChzdGF0ZU5vZGUtPnNjcm9sbGluZ05vZGVJRCgpLCBuZXdOb2RlLmdldCgpKTsKKyAgICAg
ICAgICAgIEhhc2hNYXA8U2Nyb2xsaW5nTm9kZUlELCBTY3JvbGxpbmdUcmVlTm9kZSo+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fbm9kZU1hcC5maW5kKHN0YXRlTm9kZS0+cGFyZW50KCktPnNjcm9s
bGluZ05vZGVJRCgpKTsKKyAgICAgICAgICAgIGlmIChpdCAhPSBtX25vZGVNYXAuZW5kKCkpIHsK
KyAgICAgICAgICAgICAgICBTY3JvbGxpbmdUcmVlTm9kZSogcGFyZW50ID0gaXQtPnZhbHVlOwor
ICAgICAgICAgICAgICAgIG5ld05vZGUtPnNldFBhcmVudChwYXJlbnQpOworICAgICAgICAgICAg
ICAgIHBhcmVudC0+YXBwZW5kQ2hpbGQobmV3Tm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBuZXdOb2RlLT51cGRhdGUoc3RhdGVOb2RlKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIE5vdyB1cGRhdGUgdGhlIGNoaWxkcmVuIGlmIHdlIGhhdmUgYW55LgorICAgIFZlY3RvcjxP
d25QdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPiA+KiBzdGF0ZU5vZGVDaGlsZHJlbiA9IHN0YXRlTm9k
ZS0+Y2hpbGRyZW4oKTsKKyAgICBpZiAoIXN0YXRlTm9kZUNoaWxkcmVuKQorICAgICAgICByZXR1
cm47CisKKyAgICBzaXplX3Qgc2l6ZSA9IHN0YXRlTm9kZUNoaWxkcmVuLT5zaXplKCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIHVwZGF0ZU5vZGVzRnJv
bVN0YXRlTm9kZShzdGF0ZU5vZGVDaGlsZHJlbi0+YXQoaSkuZ2V0KCkpOworfQorCit2b2lkIFNj
cm9sbGluZ1RyZWU6OnJlbW92ZURlc3Ryb3llZE5vZGVzKFNjcm9sbGluZ1N0YXRlVHJlZSogc3Rh
dGVUcmVlKQoreworICAgIGNvbnN0IFZlY3RvcjxTY3JvbGxpbmdOb2RlSUQ+JiByZW1vdmVkTm9k
ZXMgPSBzdGF0ZVRyZWUtPnJlbW92ZWROb2RlcygpOworICAgIHNpemVfdCBzaXplID0gcmVtb3Zl
ZE5vZGVzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewor
ICAgICAgICBTY3JvbGxpbmdUcmVlTm9kZSogbm9kZSA9IG1fbm9kZU1hcC50YWtlKHJlbW92ZWRO
b2Rlc1tpXSk7CisgICAgICAgIC8vIE5ldmVyIGRlc3Ryb3kgdGhlIHJvb3Qgbm9kZS4gVGhlcmUg
d2lsbCBiZSBhIG5ldyByb290IG5vZGUgaW4gdGhlIHN0YXRlIHRyZWUsIGFuZCB3ZSB3aWxsCisg
ICAgICAgIC8vIGFzc29jaWF0ZSBpdCB3aXRoIG91ciBleGlzdGluZyByb290IG5vZGUgaW4gdXBk
YXRlTm9kZXNGcm9tU3RhdGVOb2RlKCkuCisgICAgICAgIGlmIChub2RlICYmIG5vZGUtPnBhcmVu
dCgpKQorICAgICAgICAgICAgbV9yb290Tm9kZS0+cmVtb3ZlQ2hpbGQobm9kZSk7CisgICAgfQor
fQorCiB2b2lkIFNjcm9sbGluZ1RyZWU6OnNldE1haW5GcmFtZVBpblN0YXRlKGJvb2wgcGlubmVk
VG9UaGVMZWZ0LCBib29sIHBpbm5lZFRvVGhlUmlnaHQpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fc3dpcGVTdGF0ZU11dGV4KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1RyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdUcmVlLmgJKHJldmlzaW9uIDEzMTI2MikKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsOSBAQAogCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAi
UmVnaW9uLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlIDx3
dGYvRnVuY3Rpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KQEAgLTQ1LDggKzQ3LDggQEAgT0JKQ19DTEFTUyBDQUxheWVyOwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbnRQb2ludDsKLWNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOwogY2xhc3MgU2Nyb2xsaW5nVHJlZU5vZGU7CitjbGFzcyBTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZTsKIGNsYXNzIFNjcm9sbGluZ1N0YXRlVHJlZTsKIAogLy8gVGhlIFNjcm9sbGluZ1Ry
ZWUgY2xhc3MgbGl2ZXMgYWxtb3N0IGV4Y2x1c2l2ZWx5IG9uIHRoZSBzY3JvbGxpbmcgdGhyZWFk
IGFuZCBtYW5hZ2VzIHRoZQpAQCAtMTA1LDggKzEwNywxMiBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCB1cGRhdGVEZWJ1Z1Jvb3RMYXllcigpOwogCisgICAgdm9pZCByZW1vdmVEZXN0cm95ZWROb2Rl
cyhTY3JvbGxpbmdTdGF0ZVRyZWUqKTsKKyAgICB2b2lkIHVwZGF0ZU5vZGVzRnJvbVN0YXRlTm9k
ZShTY3JvbGxpbmdTdGF0ZU5vZGUqKTsKKwogICAgIFJlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRv
cj4gbV9zY3JvbGxpbmdDb29yZGluYXRvcjsKLSAgICBPd25QdHI8U2Nyb2xsaW5nVHJlZU5vZGU+
IG1fcm9vdE5vZGU7CisgICAgT3duUHRyPFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlPiBtX3Jv
b3ROb2RlOworICAgIEhhc2hNYXA8U2Nyb2xsaW5nTm9kZUlELCBTY3JvbGxpbmdUcmVlTm9kZSo+
IG1fbm9kZU1hcDsKIAogICAgIE11dGV4IG1fbXV0ZXg7CiAgICAgUmVnaW9uIG1fbm9uRmFzdFNj
cm9sbGFibGVSZWdpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUcmVlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuY3BwCShyZXZpc2lvbiAxMzEyNjIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDEzICszNCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2Nyb2xsaW5nVHJl
ZU5vZGU6OlNjcm9sbGluZ1RyZWVOb2RlKFNjcm9sbGluZ1RyZWUqIHNjcm9sbGluZ1RyZWUpCiAg
ICAgOiBtX3Njcm9sbGluZ1RyZWUoc2Nyb2xsaW5nVHJlZSkKLSAgICAsIG1fc2hvdWxkVXBkYXRl
U2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgwKQotICAgICwgbV9ob3Jpem9udGFsU2Ny
b2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSkKLSAgICAsIG1fdmVydGljYWxTY3Jv
bGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKQotICAgICwgbV9oYXNFbmFibGVkSG9y
aXpvbnRhbFNjcm9sbGJhcihmYWxzZSkKLSAgICAsIG1faGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xs
YmFyKGZhbHNlKQotICAgICwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBdXRv
KQotICAgICwgbV92ZXJ0aWNhbFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyQXV0bykKKyAgICAsIG1f
bm9kZUlEKDApCisgICAgLCBtX3BhcmVudCgwKQogewogfQogCkBAIC00OCwzNyArNDMsMjkgQEAg
U2Nyb2xsaW5nVHJlZU5vZGU6On5TY3JvbGxpbmdUcmVlTm9kZSgpCiB7CiB9CiAKLXZvaWQgU2Ny
b2xsaW5nVHJlZU5vZGU6OnVwZGF0ZShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIHN0YXRl
KQordm9pZCBTY3JvbGxpbmdUcmVlTm9kZTo6YXBwZW5kQ2hpbGQoUGFzc093blB0cjxTY3JvbGxp
bmdUcmVlTm9kZT4gY2hpbGROb2RlKQogewotICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRp
ZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Vmlld3BvcnRSZWN0KQotICAgICAg
ICBtX3ZpZXdwb3J0UmVjdCA9IHN0YXRlLT52aWV3cG9ydFJlY3QoKTsKKyAgICBjaGlsZE5vZGUt
PnNldFBhcmVudCh0aGlzKTsKIAotICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAm
IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Q29udGVudHNTaXplKQotICAgICAgICBtX2Nv
bnRlbnRzU2l6ZSA9IHN0YXRlLT5jb250ZW50c1NpemUoKTsKKyAgICBpZiAoIW1fY2hpbGRyZW4p
CisgICAgICAgIG1fY2hpbGRyZW4gPSBhZG9wdFB0cihuZXcgVmVjdG9yPE93blB0cjxTY3JvbGxp
bmdUcmVlTm9kZT4gPik7CiAKLSAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRp
b25Pbk1haW5UaHJlYWQpCi0gICAgICAgIG1fc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlv
bk9uTWFpblRocmVhZCA9IHN0YXRlLT5zaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25N
YWluVGhyZWFkKCk7Ci0KLSAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KQotICAg
ICAgICBtX2hvcml6b250YWxTY3JvbGxFbGFzdGljaXR5ID0gc3RhdGUtPmhvcml6b250YWxTY3Jv
bGxFbGFzdGljaXR5KCk7Ci0KLSAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSkKLSAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkgPSBzdGF0ZS0+dmVydGljYWxTY3JvbGxF
bGFzdGljaXR5KCk7Ci0KLSAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKQot
ICAgICAgICBtX2hhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyID0gc3RhdGUtPmhhc0VuYWJs
ZWRIb3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0KLSAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0
aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhhc0VuYWJsZWRWZXJ0aWNhbFNj
cm9sbGJhcikKLSAgICAgICAgbV9oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIgPSBzdGF0ZS0+
aGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0KLSAgICBpZiAoc3RhdGUtPmNoYW5nZWRQ
cm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxTY3Jv
bGxiYXJNb2RlKQotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXJNb2RlID0gc3RhdGUtPmhv
cml6b250YWxTY3JvbGxiYXJNb2RlKCk7CisgICAgbV9jaGlsZHJlbi0+YXBwZW5kKGNoaWxkTm9k
ZSk7Cit9CiAKLSAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU2Nyb2xsYmFyTW9kZSkKLSAgICAgICAgbV92ZXJ0
aWNhbFNjcm9sbGJhck1vZGUgPSBzdGF0ZS0+dmVydGljYWxTY3JvbGxiYXJNb2RlKCk7Cit2b2lk
IFNjcm9sbGluZ1RyZWVOb2RlOjpyZW1vdmVDaGlsZChTY3JvbGxpbmdUcmVlTm9kZSogbm9kZSkK
K3sKKyAgICBpZiAoIW1fY2hpbGRyZW4pCisgICAgICAgIHJldHVybjsKIAotICAgIGlmIChzdGF0
ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Ny
b2xsT3JpZ2luKQotICAgICAgICBtX3Njcm9sbE9yaWdpbiA9IHN0YXRlLT5zY3JvbGxPcmlnaW4o
KTsKKyAgICBpZiAoc2l6ZV90IGluZGV4ID0gbV9jaGlsZHJlbi0+ZmluZChub2RlKSkgeworICAg
ICAgICBtX2NoaWxkcmVuLT5yZW1vdmUoaW5kZXgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgc2l6ZV90IHNpemUgPSBtX2NoaWxkcmVuLT5zaXplKCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fY2hpbGRyZW4tPmF0KGkpLT5yZW1vdmVD
aGlsZChub2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9kZS5oCShyZXZpc2lv
biAxMzEyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVl
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw1NiArMzUsMzIgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7Ci1jbGFzcyBTY3JvbGxpbmdUcmVl
OwotY2xhc3MgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOwotCiBjbGFzcyBTY3JvbGxpbmdU
cmVlTm9kZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U2Nyb2xsaW5nVHJlZU5v
ZGU+IGNyZWF0ZShTY3JvbGxpbmdUcmVlKik7Ci0gICAgdmlydHVhbCB+U2Nyb2xsaW5nVHJlZU5v
ZGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlKik7Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25z
dCBJbnRQb2ludCYpID0gMDsKLQotICAgIE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zIHNob3Vs
ZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKSBjb25zdCB7IHJldHVybiBt
X3Nob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQ7IH0KLQotcHJvdGVj
dGVkOgogICAgIGV4cGxpY2l0IFNjcm9sbGluZ1RyZWVOb2RlKFNjcm9sbGluZ1RyZWUqKTsKKyAg
ICB2aXJ0dWFsIH5TY3JvbGxpbmdUcmVlTm9kZSgpOwogCi0gICAgU2Nyb2xsaW5nVHJlZSogc2Ny
b2xsaW5nVHJlZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nVHJlZTsgfQotCi0gICAgY29u
c3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFJlY3Q7
IH0KLSAgICBjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRlbnRzU2l6ZTsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoU2Nyb2xsaW5nU3RhdGVOb2Rl
KikgPSAwOwogCi0gICAgU2Nyb2xsRWxhc3RpY2l0eSBob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0
eSgpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHk7IH0KLSAgICBT
Y3JvbGxFbGFzdGljaXR5IHZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSgpIGNvbnN0IHsgcmV0dXJu
IG1fdmVydGljYWxTY3JvbGxFbGFzdGljaXR5OyB9CisgICAgU2Nyb2xsaW5nTm9kZUlEIHNjcm9s
bGluZ05vZGVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZUlEOyB9CisgICAgdm9pZCBzZXRTY3Jv
bGxpbmdOb2RlSUQoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkgeyBtX25vZGVJRCA9IG5vZGVJRDsg
fQogCi0gICAgYm9vbCBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0
dXJuIG1faGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXI7IH0KLSAgICBib29sIGhhc0VuYWJs
ZWRWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRW5hYmxlZFZlcnRpY2Fs
U2Nyb2xsYmFyOyB9CisgICAgU2Nyb2xsaW5nVHJlZU5vZGUqIHBhcmVudCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFyZW50OyB9CisgICAgdm9pZCBzZXRQYXJlbnQoU2Nyb2xsaW5nVHJlZU5vZGUqIHBh
cmVudCkgeyBtX3BhcmVudCA9IHBhcmVudDsgfQogCi0gICAgYm9vbCBjYW5IYXZlU2Nyb2xsYmFy
cygpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhck1vZGUgIT0gU2Nyb2xsYmFy
QWx3YXlzT2ZmIHx8IG1fdmVydGljYWxTY3JvbGxiYXJNb2RlICE9IFNjcm9sbGJhckFsd2F5c09m
ZjsgfQorICAgIHZvaWQgYXBwZW5kQ2hpbGQoUGFzc093blB0cjxTY3JvbGxpbmdUcmVlTm9kZT4p
OworICAgIHZvaWQgcmVtb3ZlQ2hpbGQoU2Nyb2xsaW5nVHJlZU5vZGUqKTsKIAotICAgIGNvbnN0
IEludFBvaW50JiBzY3JvbGxPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbE9yaWdpbjsg
fQorcHJvdGVjdGVkOgorICAgIFNjcm9sbGluZ1RyZWUqIHNjcm9sbGluZ1RyZWUoKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbGluZ1RyZWU7IH0KIAogcHJpdmF0ZToKICAgICBTY3JvbGxpbmdUcmVl
KiBtX3Njcm9sbGluZ1RyZWU7CiAKLSAgICBJbnRSZWN0IG1fdmlld3BvcnRSZWN0OwotICAgIElu
dFNpemUgbV9jb250ZW50c1NpemU7Ci0gICAgSW50UG9pbnQgbV9zY3JvbGxPcmlnaW47Ci0KLSAg
ICBNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyBtX3Nob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9z
aXRpb25Pbk1haW5UaHJlYWQ7Ci0KLSAgICBTY3JvbGxFbGFzdGljaXR5IG1faG9yaXpvbnRhbFNj
cm9sbEVsYXN0aWNpdHk7Ci0gICAgU2Nyb2xsRWxhc3RpY2l0eSBtX3ZlcnRpY2FsU2Nyb2xsRWxh
c3RpY2l0eTsKLSAgICAKLSAgICBib29sIG1faGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXI7
Ci0gICAgYm9vbCBtX2hhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBTY3JvbGxpbmdO
b2RlSUQgbV9ub2RlSUQ7CiAKLSAgICBTY3JvbGxiYXJNb2RlIG1faG9yaXpvbnRhbFNjcm9sbGJh
ck1vZGU7Ci0gICAgU2Nyb2xsYmFyTW9kZSBtX3ZlcnRpY2FsU2Nyb2xsYmFyTW9kZTsKKyAgICBT
Y3JvbGxpbmdUcmVlTm9kZSogbV9wYXJlbnQ7CisgICAgT3duUHRyPFZlY3RvcjxPd25QdHI8U2Ny
b2xsaW5nVHJlZU5vZGU+ID4gPiBtX2NoaWxkcmVuOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oIgorCisjaWYgRU5B
QkxFKFRIUkVBREVEX1NDUk9MTElORykKKworI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjpT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZShTY3JvbGxpbmdUcmVlKiBzY3JvbGxpbmdUcmVlKQor
ICAgIDogU2Nyb2xsaW5nVHJlZU5vZGUoc2Nyb2xsaW5nVHJlZSkKKyAgICAsIG1fc2hvdWxkVXBk
YXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgwKQorICAgICwgbV9ob3Jpem9udGFs
U2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSkKKyAgICAsIG1fdmVydGljYWxT
Y3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKQorICAgICwgbV9oYXNFbmFibGVk
SG9yaXpvbnRhbFNjcm9sbGJhcihmYWxzZSkKKyAgICAsIG1faGFzRW5hYmxlZFZlcnRpY2FsU2Ny
b2xsYmFyKGZhbHNlKQorICAgICwgbV9ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJB
dXRvKQorICAgICwgbV92ZXJ0aWNhbFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyQXV0bykKK3sKK30K
KworU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6On5TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZSgpCit7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnVwZGF0ZShTY3Jv
bGxpbmdTdGF0ZU5vZGUqIHN0YXRlTm9kZSkKK3sKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUqIHN0YXRlID0gdG9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoc3RhdGVOb2RlKTsK
KworICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZTo6Vmlld3BvcnRSZWN0KQorICAgICAgICBtX3ZpZXdwb3J0UmVjdCA9IHN0YXRl
LT52aWV3cG9ydFJlY3QoKTsKKworICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAm
IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Q29udGVudHNTaXplKQorICAgICAgICBtX2Nv
bnRlbnRzU2l6ZSA9IHN0YXRlLT5jb250ZW50c1NpemUoKTsKKworICAgIGlmIChzdGF0ZS0+Y2hh
bmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2hvdWxkVXBk
YXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCkKKyAgICAgICAgbV9zaG91bGRVcGRh
dGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkID0gc3RhdGUtPnNob3VsZFVwZGF0ZVNj
cm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKTsKKworICAgIGlmIChzdGF0ZS0+Y2hhbmdl
ZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNj
cm9sbEVsYXN0aWNpdHkpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkgPSBz
dGF0ZS0+aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKTsKKworICAgIGlmIChzdGF0ZS0+Y2hh
bmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxT
Y3JvbGxFbGFzdGljaXR5KQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSA9IHN0
YXRlLT52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoKTsKKworICAgIGlmIChzdGF0ZS0+Y2hhbmdl
ZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6SGFzRW5hYmxlZEhv
cml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIG1faGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxi
YXIgPSBzdGF0ZS0+aGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoKTsKKworICAgIGlmIChz
dGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
SGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICBtX2hhc0VuYWJsZWRWZXJ0aWNh
bFNjcm9sbGJhciA9IHN0YXRlLT5oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoKTsKKworICAg
IGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZTo6SG9yaXpvbnRhbFNjcm9sbGJhck1vZGUpCisgICAgICAgIG1faG9yaXpvbnRhbFNjcm9s
bGJhck1vZGUgPSBzdGF0ZS0+aG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoKTsKKworICAgIGlmIChz
dGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6
VmVydGljYWxTY3JvbGxiYXJNb2RlKQorICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyTW9kZSA9
IHN0YXRlLT52ZXJ0aWNhbFNjcm9sbGJhck1vZGUoKTsKKworICAgIGlmIChzdGF0ZS0+Y2hhbmdl
ZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6U2Nyb2xsT3JpZ2lu
KQorICAgICAgICBtX3Njcm9sbE9yaWdpbiA9IHN0YXRlLT5zY3JvbGxPcmlnaW4oKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFRIUkVBREVEX1NDUk9M
TElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlX2gKKyNkZWZpbmUgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVfaAor
CisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKworI2luY2x1ZGUgIkludFJlY3QuaCIK
KyNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9y
LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZU5vZGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtV2hlZWxFdmVu
dDsKK2NsYXNzIFNjcm9sbGluZ1RyZWU7CitjbGFzcyBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGU7CisKK2NsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlIDogcHVibGljIFNjcm9sbGlu
Z1RyZWVOb2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxTY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZT4gY3JlYXRlKFNjcm9sbGluZ1RyZWUqKTsKKyAgICB2aXJ0dWFsIH5TY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSgpOworCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZShTY3Jv
bGxpbmdTdGF0ZU5vZGUqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlV2hlZWxF
dmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNl
dFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JikgPSAwOworCisgICAgTWFpblRocmVhZFNj
cm9sbGluZ1JlYXNvbnMgc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVh
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFp
blRocmVhZDsgfQorCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgU2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGUoU2Nyb2xsaW5nVHJlZSopOworCisgICAgY29uc3QgSW50UmVjdCYgdmlld3BvcnRS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFJlY3Q7IH0KKyAgICBjb25zdCBJbnRTaXpl
JiBjb250ZW50c1NpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2l6ZTsgfQorCisgICAg
U2Nyb2xsRWxhc3RpY2l0eSBob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSgpIGNvbnN0IHsgcmV0
dXJuIG1faG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHk7IH0KKyAgICBTY3JvbGxFbGFzdGljaXR5
IHZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxTY3Jv
bGxFbGFzdGljaXR5OyB9CisKKyAgICBib29sIGhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFy
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcjsgfQorICAg
IGJvb2wgaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9oYXNF
bmFibGVkVmVydGljYWxTY3JvbGxiYXI7IH0KKworICAgIGJvb2wgY2FuSGF2ZVNjcm9sbGJhcnMo
KSBjb25zdCB7IHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXJNb2RlICE9IFNjcm9sbGJhckFs
d2F5c09mZiB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyTW9kZSAhPSBTY3JvbGxiYXJBbHdheXNPZmY7
IH0KKworICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxPcmlnaW4oKSBjb25zdCB7IHJldHVybiBt
X3Njcm9sbE9yaWdpbjsgfQorCitwcml2YXRlOgorICAgIEludFJlY3QgbV92aWV3cG9ydFJlY3Q7
CisgICAgSW50U2l6ZSBtX2NvbnRlbnRzU2l6ZTsKKyAgICBJbnRQb2ludCBtX3Njcm9sbE9yaWdp
bjsKKworICAgIE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zIG1fc2hvdWxkVXBkYXRlU2Nyb2xs
TGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZDsKKworICAgIFNjcm9sbEVsYXN0aWNpdHkgbV9ob3Jp
em9udGFsU2Nyb2xsRWxhc3RpY2l0eTsKKyAgICBTY3JvbGxFbGFzdGljaXR5IG1fdmVydGljYWxT
Y3JvbGxFbGFzdGljaXR5OworICAgIAorICAgIGJvb2wgbV9oYXNFbmFibGVkSG9yaXpvbnRhbFNj
cm9sbGJhcjsKKyAgICBib29sIG1faGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyOworCisgICAg
U2Nyb2xsYmFyTW9kZSBtX2hvcml6b250YWxTY3JvbGxiYXJNb2RlOworICAgIFNjcm9sbGJhck1v
ZGUgbV92ZXJ0aWNhbFNjcm9sbGJhck1vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorCisjZW5kaWYgLy8gU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdDb29yZGluYXRvck1hYy5tbQko
cmV2aXNpb24gMTMxMjYyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsNyArMjYyLDcg
QEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6ZGV0YWNoRnJvbQogCiAgICAgLy8gU2Ny
b2xsaW5nU3RhdGVUcmVlOjpyZW1vdmVOb2RlKCkgd2lsbCBkZXN0cm95IGNoaWxkcmVuLCBzbyB3
ZSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSByZW1vdmUgdGhvc2UgY2hpbGRyZW4KICAgICAvLyBmcm9t
IHRoZSBIYXNoTWFwLgotICAgY29uc3QgVmVjdG9yPFNjcm9sbGluZ05vZGVJRD4mIHJlbW92ZWRO
b2RlcyA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVkTm9kZXMoKTsKKyAgICBjb25zdCBW
ZWN0b3I8U2Nyb2xsaW5nTm9kZUlEPiYgcmVtb3ZlZE5vZGVzID0gbV9zY3JvbGxpbmdTdGF0ZVRy
ZWUtPnJlbW92ZWROb2RlcygpOwogICAgIHNpemVfdCBzaXplID0gcmVtb3ZlZE5vZGVzLnNpemUo
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKICAgICAgICAgbV9zdGF0
ZU5vZGVNYXAucmVtb3ZlKHJlbW92ZWROb2Rlc1tpXSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU1hYy5tbQkocmV2aXNp
b24gMTMxMjYyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGlu
Z1RyZWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpZiBFTkFCTEUo
VEhSRUFERURfU0NST0xMSU5HKQogCiAjaW1wb3J0ICJBdXRvZHJhaW5lZFBvb2wuaCIKLSNpbXBv
cnQgIlNjcm9sbGluZ1RyZWVOb2RlTWFjLmgiCisjaW1wb3J0ICJTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZU1hYy5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9DQVRleHRMYXllci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMv
U2Nyb2xsaW5nVHJlZU5vZGVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU5vZGVNYWMuaAkocmV2aXNpb24gMTMxMjYyKQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVOb2RlTWFj
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
U2Nyb2xsaW5nVHJlZU5vZGVNYWNfaAotI2RlZmluZSBTY3JvbGxpbmdUcmVlTm9kZU1hY19oCi0K
LSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotCi0jaW5jbHVkZSAiU2Nyb2xsRWxhc3Rp
Y2l0eUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdUcmVlTm9kZS5oIgotI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotT0JKQ19DTEFTUyBDQUxheWVyOwotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIFNjcm9sbGluZ1RyZWVOb2RlTWFjIDogcHVibGljIFNjcm9sbGlu
Z1RyZWVOb2RlLCBwcml2YXRlIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyQ2xpZW50IHsKLXB1
YmxpYzoKLSAgICBleHBsaWNpdCBTY3JvbGxpbmdUcmVlTm9kZU1hYyhTY3JvbGxpbmdUcmVlKik7
Ci0gICAgdmlydHVhbCB+U2Nyb2xsaW5nVHJlZU5vZGVNYWMoKTsKLQotcHJpdmF0ZToKLSAgICAv
LyBTY3JvbGxpbmdUcmVlTm9kZSBtZW1iZXIgZnVuY3Rpb25zLgotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKikgT1ZFUlJJREU7Ci0gICAgdmlydHVh
bCB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgT1ZFUlJJ
REU7Ci0KLSAgICAvLyBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlciBtZW1iZXIgZnVuY3Rpb25z
LgotICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NIb3Jpem9udGFsU3RyZXRjaGluZygpIE9WRVJSSURF
OwotICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKSBPVkVSUklERTsK
LSAgICB2aXJ0dWFsIEludFNpemUgc3RyZXRjaEFtb3VudCgpIE9WRVJSSURFOwotICAgIHZpcnR1
YWwgYm9vbCBwaW5uZWRJbkRpcmVjdGlvbihjb25zdCBGbG9hdFNpemUmKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIGJvb2wgY2FuU2Nyb2xsSG9yaXpvbnRhbGx5KCkgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCBib29sIGNhblNjcm9sbFZlcnRpY2FsbHkoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKFNjcm9sbERpcmVjdGlvbikgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCBJbnRQb2ludCBhYnNvbHV0ZVNjcm9sbFBvc2l0aW9uKCkgT1ZFUlJJREU7
Ci0gICAgdmlydHVhbCB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50
RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEZsb2F0U2l6ZSYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwg
dm9pZCBzdGFydFNuYXBSdWJiZXJiYW5kVGltZXIoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZv
aWQgc3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKSBPVkVSUklERTsKLQotICAgIEludFBvaW50IHNj
cm9sbFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJ
bnRQb2ludCYpOwotICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25XaXRob3V0Q29udGVudEVkZ2VD
b25zdHJhaW50cyhjb25zdCBJbnRQb2ludCYpOwotCi0gICAgdm9pZCBzZXRTY3JvbGxMYXllclBv
c2l0aW9uKGNvbnN0IEludFBvaW50Jik7Ci0KLSAgICBJbnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9z
aXRpb24oKSBjb25zdDsKLSAgICBJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25z
dDsKLQotICAgIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYpOwotICAgIHZvaWQgc2Nyb2xs
QnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBJbnRTaXplJik7Ci0KLSAgICB2
b2lkIHVwZGF0ZU1haW5GcmFtZVBpblN0YXRlKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlv
bik7Ci0KLSAgICB2b2lkIGxvZ0V4cG9zZWRVbmZpbGxlZEFyZWEoKTsKLQotICAgIFNjcm9sbEVs
YXN0aWNpdHlDb250cm9sbGVyIG1fc2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXI7Ci0gICAgUmV0
YWluUHRyPENGUnVuTG9vcFRpbWVyUmVmPiBtX3NuYXBSdWJiZXJiYW5kVGltZXI7Ci0KLSAgICBS
ZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxMYXllcjsKLSAgICBJbnRQb2ludCBtX3Byb2JhYmxl
TWFpblRocmVhZFNjcm9sbFBvc2l0aW9uOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLQotI2VuZGlmIC8vIFNjcm9s
bGluZ1RyZWVOb2RlTWFjX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21h
Yy9TY3JvbGxpbmdUcmVlTm9kZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU5vZGVNYWMubW0JKHJldmlzaW9uIDEzMTI2
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlTm9k
ZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSwzNzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdUcmVlTm9kZU1hYy5oIgotCi0j
aWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLQotI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxF
dmVudC5oIgotI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCi0jaW5jbHVkZSAiU2Ny
b2xsaW5nVHJlZS5oIgotI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgotI2luY2x1ZGUg
IlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiVGlsZUNhY2hlLmgiCi0jaW5jbHVkZSAiV2ViVGlsZUxh
eWVyLmgiCi0KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvRGVx
dWUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyB2b2lkIGxv
Z1RocmVhZGVkU2Nyb2xsaW5nTW9kZSh1bnNpZ25lZCBtYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29u
cyk7Ci0KLVBhc3NPd25QdHI8U2Nyb2xsaW5nVHJlZU5vZGU+IFNjcm9sbGluZ1RyZWVOb2RlOjpj
cmVhdGUoU2Nyb2xsaW5nVHJlZSogc2Nyb2xsaW5nVHJlZSkKLXsKLSAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IFNjcm9sbGluZ1RyZWVOb2RlTWFjKHNjcm9sbGluZ1RyZWUpKTsKLX0KLQotU2Nyb2xs
aW5nVHJlZU5vZGVNYWM6OlNjcm9sbGluZ1RyZWVOb2RlTWFjKFNjcm9sbGluZ1RyZWUqIHNjcm9s
bGluZ1RyZWUpCi0gICAgOiBTY3JvbGxpbmdUcmVlTm9kZShzY3JvbGxpbmdUcmVlKQotICAgICwg
bV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcih0aGlzKQotewotfQotCi1TY3JvbGxpbmdUcmVl
Tm9kZU1hYzo6flNjcm9sbGluZ1RyZWVOb2RlTWFjKCkKLXsKLSAgICBpZiAobV9zbmFwUnViYmVy
YmFuZFRpbWVyKQotICAgICAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUobV9zbmFwUnViYmVy
YmFuZFRpbWVyLmdldCgpKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6dXBkYXRl
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGUpCi17Ci0gICAgU2Nyb2xsaW5nVHJl
ZU5vZGU6OnVwZGF0ZShzdGF0ZSk7Ci0KLSAgICBpZiAoc3RhdGUtPnNjcm9sbExheWVyRGlkQ2hh
bmdlKCkpCi0gICAgICAgIG1fc2Nyb2xsTGF5ZXIgPSBzdGF0ZS0+cGxhdGZvcm1TY3JvbGxMYXll
cigpOwotCi0gICAgaWYgKHN0YXRlLT5jaGFuZ2VkUHJvcGVydGllcygpICYgU2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlOjpSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbikKLSAgICAgICAgc2V0U2Ny
b2xsUG9zaXRpb24oc3RhdGUtPnJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKCkpOwotCi0gICAgaWYg
KHN0YXRlLT5zY3JvbGxMYXllckRpZENoYW5nZSgpIHx8IHN0YXRlLT5jaGFuZ2VkUHJvcGVydGll
cygpICYgKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Q29udGVudHNTaXplIHwgU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpWaWV3cG9ydFJlY3QpKQotICAgICAgICB1cGRhdGVNYWlu
RnJhbWVQaW5TdGF0ZShzY3JvbGxQb3NpdGlvbigpKTsKLQotICAgIGlmICgoc3RhdGUtPmNoYW5n
ZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNob3VsZFVwZGF0
ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpKSB7Ci0gICAgICAgIHVuc2lnbmVkIG1h
aW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zID0gdGhpcy0+c2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQ
b3NpdGlvbk9uTWFpblRocmVhZCgpOwotCi0gICAgICAgIGlmIChtYWluVGhyZWFkU2Nyb2xsaW5n
UmVhc29ucykgewotICAgICAgICAgICAgLy8gV2UncmUgdHJhbnNpdGlvbmluZyB0byB0aGUgc2xv
dyAidXBkYXRlIHNjcm9sbCBsYXllciBwb3NpdGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQiIG1vZGUu
Ci0gICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBwcm9iYWJsZSBtYWluIHRocmVhZCBzY3Jv
bGwgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCBzY3JvbGwgbGF5ZXIgcG9zaXRpb24uCi0gICAg
ICAgICAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU6OlJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKQotICAgICAgICAgICAgICAgIG1f
cHJvYmFibGVNYWluVGhyZWFkU2Nyb2xsUG9zaXRpb24gPSBzdGF0ZS0+cmVxdWVzdGVkU2Nyb2xs
UG9zaXRpb24oKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIENHUG9pbnQg
c2Nyb2xsTGF5ZXJQb3NpdGlvbiA9IG1fc2Nyb2xsTGF5ZXIuZ2V0KCkucG9zaXRpb247Ci0gICAg
ICAgICAgICAgICAgbV9wcm9iYWJsZU1haW5UaHJlYWRTY3JvbGxQb3NpdGlvbiA9IEludFBvaW50
KC1zY3JvbGxMYXllclBvc2l0aW9uLngsIC1zY3JvbGxMYXllclBvc2l0aW9uLnkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNjcm9sbGluZ1RyZWUoKS0+c2Nyb2xs
aW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgbG9nVGhyZWFkZWRT
Y3JvbGxpbmdNb2RlKG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKTsKLSAgICB9Ci19Ci0KLXZv
aWQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiB3aGVlbEV2ZW50KQotewotICAgIGlmICghY2FuSGF2ZVNjcm9sbGJhcnMoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oYW5k
bGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwotICAgIHNjcm9sbGluZ1RyZWUoKS0+aGFuZGxlV2hl
ZWxFdmVudFBoYXNlKHdoZWVsRXZlbnQucGhhc2UoKSk7Ci19Ci0KLWJvb2wgU2Nyb2xsaW5nVHJl
ZU5vZGVNYWM6OmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKCkKLXsKLSAgICBzd2l0Y2ggKGhv
cml6b250YWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKLSAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlB
dXRvbWF0aWM6Ci0gICAgICAgIHJldHVybiBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcigp
IHx8ICFoYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoKTsKLSAgICBjYXNlIFNjcm9sbEVsYXN0
aWNpdHlOb25lOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBTY3JvbGxFbGFzdGlj
aXR5QWxsb3dlZDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFNjcm9sbGluZ1RyZWVO
b2RlTWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKQotewotICAgIHN3aXRjaCAodmVydGlj
YWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKLSAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0
aWM6Ci0gICAgICAgIHJldHVybiBoYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoKSB8fCAhaGFz
RW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoKTsKLSAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlO
b25lOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QWxs
b3dlZDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1JbnRTaXplIFNjcm9sbGluZ1RyZWVOb2Rl
TWFjOjpzdHJldGNoQW1vdW50KCkKLXsKLSAgICBJbnRTaXplIHN0cmV0Y2g7Ci0KLSAgICBpZiAo
c2Nyb2xsUG9zaXRpb24oKS55KCkgPCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpCi0gICAg
ICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbFBvc2l0aW9uKCkueSgpIC0gbWluaW11bVNjcm9s
bFBvc2l0aW9uKCkueSgpKTsKLSAgICBlbHNlIGlmIChzY3JvbGxQb3NpdGlvbigpLnkoKSA+IG1h
eGltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSkKLSAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Ny
b2xsUG9zaXRpb24oKS55KCkgLSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpOwotCi0gICAg
aWYgKHNjcm9sbFBvc2l0aW9uKCkueCgpIDwgbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueCgpKQot
ICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbFBvc2l0aW9uKCkueCgpIC0gbWluaW11bVNj
cm9sbFBvc2l0aW9uKCkueCgpKTsKLSAgICBlbHNlIGlmIChzY3JvbGxQb3NpdGlvbigpLngoKSA+
IG1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKSkKLSAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChz
Y3JvbGxQb3NpdGlvbigpLngoKSAtIG1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKSk7Ci0KLSAg
ICByZXR1cm4gc3RyZXRjaDsKLX0KLQotYm9vbCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6cGlubmVk
SW5EaXJlY3Rpb24oY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKLXsKLSAgICBGbG9hdFNpemUgbGlt
aXREZWx0YTsKLQotICAgIGlmIChmYWJzZihkZWx0YS5oZWlnaHQoKSkgPj0gZmFic2YoZGVsdGEu
d2lkdGgoKSkpIHsKLSAgICAgICAgaWYgKGRlbHRhLmhlaWdodCgpIDwgMCkgewotICAgICAgICAg
ICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgdXAuICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBw
aW5uZWQgdG8gdGhlIHRvcAotICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQoc2Nyb2xs
UG9zaXRpb24oKS55KCkgLSBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgZG93bi4gIE1h
a2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgYm90dG9tCi0gICAgICAgICAgICBsaW1p
dERlbHRhLnNldEhlaWdodChtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkgLSBzY3JvbGxQb3Np
dGlvbigpLnkoKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGRlbHRhLndpZHRoKCkpIHsK
LSAgICAgICAgaWYgKGRlbHRhLndpZHRoKCkgPCAwKSB7Ci0gICAgICAgICAgICAvLyBXZSBhcmUg
dHJ5aW5nIHRvIHNjcm9sbCBsZWZ0LiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRo
ZSBsZWZ0Ci0gICAgICAgICAgICBsaW1pdERlbHRhLnNldEhlaWdodChzY3JvbGxQb3NpdGlvbigp
LngoKSAtIG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLngoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCByaWdodC4gIE1ha2Ugc3VyZSB3
ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgcmlnaHQKLSAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0
SGVpZ2h0KG1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKSAtIHNjcm9sbFBvc2l0aW9uKCkueCgp
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgoZGVsdGEud2lkdGgoKSB8fCBkZWx0YS5o
ZWlnaHQoKSkgJiYgKGxpbWl0RGVsdGEud2lkdGgoKSA8IDEgJiYgbGltaXREZWx0YS5oZWlnaHQo
KSA8IDEpKSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpjYW5TY3JvbGxIb3Jpem9udGFsbHko
KQotewotICAgIHJldHVybiBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcigpOwotfQotCi1i
b29sIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpjYW5TY3JvbGxWZXJ0aWNhbGx5KCkKLXsKLSAgICBy
ZXR1cm4gaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci19Ci0KLWJvb2wgU2Nyb2xsaW5n
VHJlZU5vZGVNYWM6OnNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxEaXJlY3Rpb24g
ZGlyZWN0aW9uKQotewotICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCkKLSAgICAgICAg
cmV0dXJuICFzY3JvbGxpbmdUcmVlKCktPmNhbkdvQmFjaygpOwotICAgIGlmIChkaXJlY3Rpb24g
PT0gU2Nyb2xsUmlnaHQpCi0gICAgICAgIHJldHVybiAhc2Nyb2xsaW5nVHJlZSgpLT5jYW5Hb0Zv
cndhcmQoKTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotSW50UG9pbnQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OmFic29sdXRlU2Nyb2xsUG9zaXRp
b24oKQotewotICAgIHJldHVybiBzY3JvbGxQb3NpdGlvbigpOwotfQotCi12b2lkIFNjcm9sbGlu
Z1RyZWVOb2RlTWFjOjppbW1lZGlhdGVTY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIG9mZnNldCkK
LXsKLSAgICBzY3JvbGxCeShyb3VuZGVkSW50U2l6ZShvZmZzZXQpKTsKLX0KLQotdm9pZCBTY3Jv
bGxpbmdUcmVlTm9kZU1hYzo6aW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25z
dHJhaW50cyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKLXsKLSAgICBzY3JvbGxCeVdpdGhvdXRD
b250ZW50RWRnZUNvbnN0cmFpbnRzKHJvdW5kZWRJbnRTaXplKG9mZnNldCkpOwotfQotCi12b2lk
IFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpzdGFydFNuYXBSdWJiZXJiYW5kVGltZXIoKQotewotICAg
IEFTU0VSVCghbV9zbmFwUnViYmVyYmFuZFRpbWVyKTsKLQotICAgIENGVGltZUludGVydmFsIHRp
bWVySW50ZXJ2YWwgPSAxLjAgLyA2MC4wOwotCi0gICAgbV9zbmFwUnViYmVyYmFuZFRpbWVyID0g
YWRvcHRDRihDRlJ1bkxvb3BUaW1lckNyZWF0ZVdpdGhIYW5kbGVyKGtDRkFsbG9jYXRvckRlZmF1
bHQsIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgdGltZXJJbnRlcnZhbCwgdGltZXJJbnRl
cnZhbCwgMCwgMCwgXihDRlJ1bkxvb3BUaW1lclJlZikgewotICAgICAgICBtX3Njcm9sbEVsYXN0
aWNpdHlDb250cm9sbGVyLnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZCgpOwotICAgIH0pKTsKLSAg
ICBDRlJ1bkxvb3BBZGRUaW1lcihDRlJ1bkxvb3BHZXRDdXJyZW50KCksIG1fc25hcFJ1YmJlcmJh
bmRUaW1lci5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLX0KLQotdm9pZCBTY3JvbGxp
bmdUcmVlTm9kZU1hYzo6c3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKQotewotICAgIGlmICghbV9z
bmFwUnViYmVyYmFuZFRpbWVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDRlJ1bkxvb3BUaW1l
ckludmFsaWRhdGUobV9zbmFwUnViYmVyYmFuZFRpbWVyLmdldCgpKTsKLSAgICBtX3NuYXBSdWJi
ZXJiYW5kVGltZXIgPSBudWxscHRyOwotfQotCi1JbnRQb2ludCBTY3JvbGxpbmdUcmVlTm9kZU1h
Yzo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAotewotICAgIGlmIChzaG91bGRVcGRhdGVTY3JvbGxM
YXllclBvc2l0aW9uT25NYWluVGhyZWFkKCkpCi0gICAgICAgIHJldHVybiBtX3Byb2JhYmxlTWFp
blRocmVhZFNjcm9sbFBvc2l0aW9uOwotCi0gICAgQ0dQb2ludCBzY3JvbGxMYXllclBvc2l0aW9u
ID0gbV9zY3JvbGxMYXllci5nZXQoKS5wb3NpdGlvbjsKLSAgICByZXR1cm4gSW50UG9pbnQoLXNj
cm9sbExheWVyUG9zaXRpb24ueCArIHNjcm9sbE9yaWdpbigpLngoKSwgLXNjcm9sbExheWVyUG9z
aXRpb24ueSArIHNjcm9sbE9yaWdpbigpLnkoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZU5v
ZGVNYWM6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikK
LXsKLSAgICBJbnRQb2ludCBuZXdTY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOwotICAg
IG5ld1Njcm9sbFBvc2l0aW9uID0gbmV3U2Nyb2xsUG9zaXRpb24uc2hydW5rVG8obWF4aW11bVNj
cm9sbFBvc2l0aW9uKCkpOwotICAgIG5ld1Njcm9sbFBvc2l0aW9uID0gbmV3U2Nyb2xsUG9zaXRp
b24uZXhwYW5kZWRUbyhtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSk7Ci0KLSAgICBzZXRTY3JvbGxQ
b3NpdGlvbldpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKG5ld1Njcm9sbFBvc2l0aW9uKTsK
LQotICAgIGlmIChzY3JvbGxpbmdUcmVlKCktPnNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0Vu
YWJsZWQoKSkKLSAgICAgICAgbG9nRXhwb3NlZFVuZmlsbGVkQXJlYSgpOwotfQotCi12b2lkIFNj
cm9sbGluZ1RyZWVOb2RlTWFjOjpzZXRTY3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50RWRnZUNv
bnN0cmFpbnRzKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKLXsKLSAgICB1cGRhdGVN
YWluRnJhbWVQaW5TdGF0ZShzY3JvbGxQb3NpdGlvbik7Ci0KLSAgICBpZiAoc2hvdWxkVXBkYXRl
U2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpKSB7Ci0gICAgICAgIG1fcHJvYmFibGVN
YWluVGhyZWFkU2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKLSAgICAgICAgc2Nyb2xs
aW5nVHJlZSgpLT51cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExheWVyUG9z
aXRpb24oc2Nyb2xsUG9zaXRpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc2V0
U2Nyb2xsTGF5ZXJQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7Ci0gICAgc2Nyb2xsaW5nVHJlZSgp
LT51cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7Ci19Ci0KLXZv
aWQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OnNldFNjcm9sbExheWVyUG9zaXRpb24oY29uc3QgSW50
UG9pbnQmIHBvc2l0aW9uKQotewotICAgIEFTU0VSVCghc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQ
b3NpdGlvbk9uTWFpblRocmVhZCgpKTsKLSAgICBtX3Njcm9sbExheWVyLmdldCgpLnBvc2l0aW9u
ID0gQ0dQb2ludE1ha2UoLXBvc2l0aW9uLngoKSArIHNjcm9sbE9yaWdpbigpLngoKSwgLXBvc2l0
aW9uLnkoKSArIHNjcm9sbE9yaWdpbigpLnkoKSk7Ci19Ci0KLUludFBvaW50IFNjcm9sbGluZ1Ry
ZWVOb2RlTWFjOjptaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBJ
bnRQb2ludCgwLCAwKTsKLX0KLQotSW50UG9pbnQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6Om1heGlt
dW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgcG9zaXRpb24oY29udGVu
dHNTaXplKCkud2lkdGgoKSAtIHZpZXdwb3J0UmVjdCgpLndpZHRoKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgY29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSB2aWV3cG9ydFJlY3QoKS5oZWlnaHQo
KSk7Ci0KLSAgICBwb3NpdGlvbi5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7Ci0KLSAgICByZXR1cm4g
cG9zaXRpb247Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OnNjcm9sbEJ5KGNvbnN0
IEludFNpemUmIG9mZnNldCkKLXsKLSAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlv
bigpICsgb2Zmc2V0KTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6c2Nyb2xsQnlX
aXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBJbnRTaXplJiBvZmZzZXQpCi17Ci0g
ICAgc2V0U2Nyb2xsUG9zaXRpb25XaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhzY3JvbGxQ
b3NpdGlvbigpICsgb2Zmc2V0KTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6dXBk
YXRlTWFpbkZyYW1lUGluU3RhdGUoY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQotewot
ICAgIGJvb2wgcGlubmVkVG9UaGVMZWZ0ID0gc2Nyb2xsUG9zaXRpb24ueCgpIDw9IG1pbmltdW1T
Y3JvbGxQb3NpdGlvbigpLngoKTsKLSAgICBib29sIHBpbm5lZFRvVGhlUmlnaHQgPSBzY3JvbGxQ
b3NpdGlvbi54KCkgPj0gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueCgpOwotCi0gICAgc2Nyb2xs
aW5nVHJlZSgpLT5zZXRNYWluRnJhbWVQaW5TdGF0ZShwaW5uZWRUb1RoZUxlZnQsIHBpbm5lZFRv
VGhlUmlnaHQpOwotfQotCi12b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpsb2dFeHBvc2VkVW5m
aWxsZWRBcmVhKCkKLXsKLSAgICBSZWdpb24gcGFpbnRlZFZpc2libGVUaWxlczsKLQotICAgIERl
cXVlPENBTGF5ZXIqPiBsYXllclF1ZXVlOwotICAgIGxheWVyUXVldWUuYXBwZW5kKG1fc2Nyb2xs
TGF5ZXIuZ2V0KCkpOwotICAgIFdlYlRpbGVMYXllckxpc3QgdGlsZXM7Ci0KLSAgICB3aGlsZSgh
bGF5ZXJRdWV1ZS5pc0VtcHR5KCkgJiYgdGlsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIENBTGF5
ZXIqIGxheWVyID0gbGF5ZXJRdWV1ZS50YWtlRmlyc3QoKTsKLSAgICAgICAgTlNBcnJheSogc3Vi
bGF5ZXJzID0gW1tsYXllciBzdWJsYXllcnNdIGNvcHldOwotCi0gICAgICAgIC8vIElmIHRoaXMg
bGF5ZXIgaXMgdGhlIHBhcmVudCBvZiBhIHRpbGUsIGl0IGlzIHRoZSBwYXJlbnQgb2YgYWxsIG9m
IHRoZSB0aWxlcyBhbmQgbm90aGluZyBlbHNlLgotICAgICAgICBpZiAoW1tzdWJsYXllcnMgb2Jq
ZWN0QXRJbmRleDowXSBpc0tpbmRPZkNsYXNzOltXZWJUaWxlTGF5ZXIgY2xhc3NdXSkgewotICAg
ICAgICAgICAgZm9yIChDQUxheWVyKiBzdWJsYXllciBpbiBzdWJsYXllcnMpIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoW3N1YmxheWVyIGlzS2luZE9mQ2xhc3M6W1dlYlRpbGVMYXllciBjbGFz
c11dKTsKLSAgICAgICAgICAgICAgICB0aWxlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8V2ViVGlsZUxh
eWVyKj4oc3VibGF5ZXIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGZvciAoQ0FMYXllciogc3VibGF5ZXIgaW4gc3VibGF5ZXJzKQotICAgICAgICAgICAg
ICAgIGxheWVyUXVldWUuYXBwZW5kKHN1YmxheWVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIFtz
dWJsYXllcnMgcmVsZWFzZV07Ci0gICAgfQotCi0gICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24g
PSB0aGlzLT5zY3JvbGxQb3NpdGlvbigpOwotICAgIHVuc2lnbmVkIHVuZmlsbGVkQXJlYSA9IFRp
bGVDYWNoZTo6YmxhbmtQaXhlbENvdW50Rm9yVGlsZXModGlsZXMsIHZpZXdwb3J0UmVjdCgpLCBJ
bnRQb2ludCgtc2Nyb2xsUG9zaXRpb24ueCgpLCAtc2Nyb2xsUG9zaXRpb24ueSgpKSk7Ci0KLSAg
ICBpZiAodW5maWxsZWRBcmVhKQotICAgICAgICBXVEZMb2dBbHdheXMoIlNDUk9MTElORzogRXhw
b3NlZCB0aWxlbGVzcyBhcmVhLiBUaW1lOiAlZiBVbmZpbGxlZCBQaXhlbHM6ICV1XG4iLCBXVEY6
Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLCB1bmZpbGxlZEFyZWEpOwotfQotCi1zdGF0
aWMgdm9pZCBsb2dUaHJlYWRlZFNjcm9sbGluZ01vZGUodW5zaWduZWQgbWFpblRocmVhZFNjcm9s
bGluZ1JlYXNvbnMpCi17Ci0gICAgaWYgKG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKSB7Ci0g
ICAgICAgIFN0cmluZ0J1aWxkZXIgcmVhc29uc0Rlc2NyaXB0aW9uOwotCi0gICAgICAgIGlmICht
YWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyAmIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpGb3JjZWRP
bk1haW5UaHJlYWQpCi0gICAgICAgICAgICByZWFzb25zRGVzY3JpcHRpb24uYXBwZW5kKCJmb3Jj
ZWQsIik7Ci0gICAgICAgIGlmIChtYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyAmIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpIYXNTbG93UmVwYWludE9iamVjdHMpCi0gICAgICAgICAgICByZWFzb25z
RGVzY3JpcHRpb24uYXBwZW5kKCJzbG93LXJlcGFpbnQgb2JqZWN0cywiKTsKLSAgICAgICAgaWYg
KG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zICYgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6Okhhc1Zp
ZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzV2l0aG91dFN1cHBvcnRpbmdGaXhlZExheWVycykKLSAg
ICAgICAgICAgIHJlYXNvbnNEZXNjcmlwdGlvbi5hcHBlbmQoInZpZXdwb3J0LWNvbnN0cmFpbmVk
IG9iamVjdHMsIik7Ci0gICAgICAgIGlmIChtYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyAmIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpIYXNOb25MYXllckZpeGVkT2JqZWN0cykKLSAgICAgICAgICAg
IHJlYXNvbnNEZXNjcmlwdGlvbi5hcHBlbmQoIm5vbi1sYXllciB2aWV3cG9ydC1jb25zdHJhaW5l
ZCBvYmplY3RzLCIpOwotICAgICAgICBpZiAobWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMgJiBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6SXNJbWFnZURvY3VtZW50KQotICAgICAgICAgICAgcmVhc29u
c0Rlc2NyaXB0aW9uLmFwcGVuZCgiaW1hZ2UgZG9jdW1lbnQsIik7Ci0KLSAgICAgICAgLy8gU3Ry
aXAgdGhlIHRyYWlsaW5nIGNvbW1hLgotICAgICAgICBTdHJpbmcgcmVhc29uc0Rlc2NyaXB0aW9u
VHJpbW1lZCA9IHJlYXNvbnNEZXNjcmlwdGlvbi50b1N0cmluZygpLmxlZnQocmVhc29uc0Rlc2Ny
aXB0aW9uLmxlbmd0aCgpIC0gMSk7Ci0KLSAgICAgICAgV1RGTG9nQWx3YXlzKCJTQ1JPTExJTkc6
IFN3aXRjaGluZyB0byBtYWluLXRocmVhZCBzY3JvbGxpbmcgbW9kZS4gVGltZTogJWYgUmVhc29u
KHMpOiAlc1xuIiwgV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSwgcmVhc29uc0Rl
c2NyaXB0aW9uVHJpbW1lZC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIFdU
RkxvZ0Fsd2F5cygiU0NST0xMSU5HOiBTd2l0Y2hpbmcgdG8gdGhyZWFkZWQgc2Nyb2xsaW5nIG1v
ZGUuIFRpbWU6ICVmXG4iLCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFRIUkVBREVEX1ND
Uk9MTElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5oCShyZXZpc2lv
biAxMzExMzYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxp
bmdUcmVlTm9kZU1hYy5oOjEzMTEzNikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9sbGluZ1RyZWVOb2RlTWFjX2gK
KyNkZWZpbmUgU2Nyb2xsaW5nVHJlZU5vZGVNYWNfaAorCisjaWYgRU5BQkxFKFRIUkVBREVEX1ND
Uk9MTElORykKKworI2luY2x1ZGUgIlNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmgiCisjaW5j
bHVkZSAiU2Nyb2xsaW5nVHJlZU5vZGUuaCIKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisK
K09CSkNfQ0xBU1MgQ0FMYXllcjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY3Jv
bGxpbmdUcmVlTm9kZU1hYyA6IHB1YmxpYyBTY3JvbGxpbmdUcmVlTm9kZSwgcHJpdmF0ZSBTY3Jv
bGxFbGFzdGljaXR5Q29udHJvbGxlckNsaWVudCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2Ny
b2xsaW5nVHJlZU5vZGVNYWMoU2Nyb2xsaW5nVHJlZSopOworICAgIHZpcnR1YWwgflNjcm9sbGlu
Z1RyZWVOb2RlTWFjKCk7CisKK3ByaXZhdGU6CisgICAgLy8gU2Nyb2xsaW5nVHJlZU5vZGUgbWVt
YmVyIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlKFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVXaGVlbEV2ZW50
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIE9WRVJSSURFOworCisgICAgLy8gU2Nyb2xsRWxh
c3RpY2l0eUNvbnRyb2xsZXIgbWVtYmVyIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIGJvb2wgYWxs
b3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgYWxs
b3dzVmVydGljYWxTdHJldGNoaW5nKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBJbnRTaXplIHN0
cmV0Y2hBbW91bnQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcGlubmVkSW5EaXJlY3Rp
b24oY29uc3QgRmxvYXRTaXplJikgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIGNhblNjcm9s
bEhvcml6b250YWxseSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBjYW5TY3JvbGxWZXJ0
aWNhbGx5KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHNob3VsZFJ1YmJlckJhbmRJbkRp
cmVjdGlvbihTY3JvbGxEaXJlY3Rpb24pIE9WRVJSSURFOworICAgIHZpcnR1YWwgSW50UG9pbnQg
YWJzb2x1dGVTY3JvbGxQb3NpdGlvbigpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBpbW1l
ZGlhdGVTY3JvbGxCeShjb25zdCBGbG9hdFNpemUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgaW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBG
bG9hdFNpemUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRTbmFwUnViYmVyYmFu
ZFRpbWVyKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN0b3BTbmFwUnViYmVyYmFuZFRp
bWVyKCkgT1ZFUlJJREU7CisKKyAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbigpIGNvbnN0Owor
ICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmKTsKKyAgICB2b2lkIHNl
dFNjcm9sbFBvc2l0aW9uV2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMoY29uc3QgSW50UG9p
bnQmKTsKKworICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihjb25zdCBJbnRQb2ludCYp
OworCisgICAgSW50UG9pbnQgbWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Q7CisgICAgSW50
UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Q7CisKKyAgICB2b2lkIHNjcm9sbEJ5
KGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lkIHNjcm9sbEJ5V2l0aG91dENvbnRlbnRFZGdlQ29u
c3RyYWludHMoY29uc3QgSW50U2l6ZSYpOworCisgICAgdm9pZCB1cGRhdGVNYWluRnJhbWVQaW5T
dGF0ZShjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOworCisgICAgdm9pZCBsb2dFeHBv
c2VkVW5maWxsZWRBcmVhKCk7CisKKyAgICBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlciBtX3Nj
cm9sbEVsYXN0aWNpdHlDb250cm9sbGVyOworICAgIFJldGFpblB0cjxDRlJ1bkxvb3BUaW1lclJl
Zj4gbV9zbmFwUnViYmVyYmFuZFRpbWVyOworCisgICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fc2Ny
b2xsTGF5ZXI7CisgICAgSW50UG9pbnQgbV9wcm9iYWJsZU1haW5UaHJlYWRTY3JvbGxQb3NpdGlv
bjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShUSFJF
QURFRF9TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxpbmdUcmVlTm9kZU1hY19oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9t
YWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMuaAkocmV2aXNpb24gMTMxMTM2KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDI3ICsyMywyNyBAQAogICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgU2Nyb2xsaW5nVHJlZU5vZGVN
YWNfaAotI2RlZmluZSBTY3JvbGxpbmdUcmVlTm9kZU1hY19oCisjaWZuZGVmIFNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlTWFjX2gKKyNkZWZpbmUgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVN
YWNfaAogCiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKIAogI2luY2x1ZGUgIlNjcm9s
bEVsYXN0aWNpdHlDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZU5vZGUuaCIK
KyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5oIgogI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KIAogT0JKQ19DTEFTUyBDQUxheWVyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIFNjcm9sbGluZ1RyZWVOb2RlTWFjIDogcHVibGljIFNjcm9sbGluZ1RyZWVOb2Rl
LCBwcml2YXRlIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyQ2xpZW50IHsKK2NsYXNzIFNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjIDogcHVibGljIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlLCBwcml2YXRlIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyQ2xpZW50IHsKIHB1YmxpYzoK
LSAgICBleHBsaWNpdCBTY3JvbGxpbmdUcmVlTm9kZU1hYyhTY3JvbGxpbmdUcmVlKik7Ci0gICAg
dmlydHVhbCB+U2Nyb2xsaW5nVHJlZU5vZGVNYWMoKTsKKyAgICBleHBsaWNpdCBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZU1hYyhTY3JvbGxpbmdUcmVlKik7CisgICAgdmlydHVhbCB+U2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVNYWMoKTsKIAogcHJpdmF0ZToKICAgICAvLyBTY3JvbGxpbmdU
cmVlTm9kZSBtZW1iZXIgZnVuY3Rpb25zLgotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZShTY3JvbGxpbmdTdGF0ZU5vZGUqKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBPVkVSUklERTsKIAogICAgIC8v
IFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyIG1lbWJlciBmdW5jdGlvbnMuCkBAIC04Nyw0ICs4
Nyw0IEBAIHByaXZhdGU6CiAKICNlbmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQog
Ci0jZW5kaWYgLy8gU2Nyb2xsaW5nVHJlZU5vZGVNYWNfaAorI2VuZGlmIC8vIFNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlTWFjX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVN
YWMubW0JKHJldmlzaW9uIDEzMTEzNikJKGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ1RyZWVOb2RlTWFjLm1tOjEzMTEzNikKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlTm9kZU1hYy5oIgorCisjaWYgRU5BQkxFKFRI
UkVBREVEX1NDUk9MTElORykKKworI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2lu
Y2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5o
IgorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgi
CisjaW5jbHVkZSAiVGlsZUNhY2hlLmgiCisjaW5jbHVkZSAiV2ViVGlsZUxheWVyLmgiCisKKyNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2b2lkIGxvZ1RocmVhZGVkU2Ny
b2xsaW5nTW9kZSh1bnNpZ25lZCBtYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyk7CisKK1Bhc3NP
d25QdHI8U2Nyb2xsaW5nVHJlZU5vZGU+IFNjcm9sbGluZ1RyZWVOb2RlOjpjcmVhdGUoU2Nyb2xs
aW5nVHJlZSogc2Nyb2xsaW5nVHJlZSkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9s
bGluZ1RyZWVOb2RlTWFjKHNjcm9sbGluZ1RyZWUpKTsKK30KKworU2Nyb2xsaW5nVHJlZU5vZGVN
YWM6OlNjcm9sbGluZ1RyZWVOb2RlTWFjKFNjcm9sbGluZ1RyZWUqIHNjcm9sbGluZ1RyZWUpCisg
ICAgOiBTY3JvbGxpbmdUcmVlTm9kZShzY3JvbGxpbmdUcmVlKQorICAgICwgbV9zY3JvbGxFbGFz
dGljaXR5Q29udHJvbGxlcih0aGlzKQoreworfQorCitTY3JvbGxpbmdUcmVlTm9kZU1hYzo6flNj
cm9sbGluZ1RyZWVOb2RlTWFjKCkKK3sKKyAgICBpZiAobV9zbmFwUnViYmVyYmFuZFRpbWVyKQor
ICAgICAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUobV9zbmFwUnViYmVyYmFuZFRpbWVyLmdl
dCgpKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6dXBkYXRlKFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGUpCit7CisgICAgU2Nyb2xsaW5nVHJlZU5vZGU6OnVwZGF0
ZShzdGF0ZSk7CisKKyAgICBpZiAoc3RhdGUtPnNjcm9sbExheWVyRGlkQ2hhbmdlKCkpCisgICAg
ICAgIG1fc2Nyb2xsTGF5ZXIgPSBzdGF0ZS0+cGxhdGZvcm1TY3JvbGxMYXllcigpOworCisgICAg
aWYgKHN0YXRlLT5jaGFuZ2VkUHJvcGVydGllcygpICYgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlOjpSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbikKKyAgICAgICAgc2V0U2Nyb2xsUG9zaXRpb24o
c3RhdGUtPnJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKCkpOworCisgICAgaWYgKHN0YXRlLT5zY3Jv
bGxMYXllckRpZENoYW5nZSgpIHx8IHN0YXRlLT5jaGFuZ2VkUHJvcGVydGllcygpICYgKFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Q29udGVudHNTaXplIHwgU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOjpWaWV3cG9ydFJlY3QpKQorICAgICAgICB1cGRhdGVNYWluRnJhbWVQaW5TdGF0
ZShzY3JvbGxQb3NpdGlvbigpKTsKKworICAgIGlmICgoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVz
KCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNob3VsZFVwZGF0ZVNjcm9sbExheWVy
UG9zaXRpb25Pbk1haW5UaHJlYWQpKSB7CisgICAgICAgIHVuc2lnbmVkIG1haW5UaHJlYWRTY3Jv
bGxpbmdSZWFzb25zID0gdGhpcy0+c2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFp
blRocmVhZCgpOworCisgICAgICAgIGlmIChtYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucykgewor
ICAgICAgICAgICAgLy8gV2UncmUgdHJhbnNpdGlvbmluZyB0byB0aGUgc2xvdyAidXBkYXRlIHNj
cm9sbCBsYXllciBwb3NpdGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQiIG1vZGUuCisgICAgICAgICAg
ICAvLyBJbml0aWFsaXplIHRoZSBwcm9iYWJsZSBtYWluIHRocmVhZCBzY3JvbGwgcG9zaXRpb24g
d2l0aCB0aGUgY3VycmVudCBzY3JvbGwgbGF5ZXIgcG9zaXRpb24uCisgICAgICAgICAgICBpZiAo
c3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6
OlJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKQorICAgICAgICAgICAgICAgIG1fcHJvYmFibGVNYWlu
VGhyZWFkU2Nyb2xsUG9zaXRpb24gPSBzdGF0ZS0+cmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oKTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIENHUG9pbnQgc2Nyb2xsTGF5ZXJQ
b3NpdGlvbiA9IG1fc2Nyb2xsTGF5ZXIuZ2V0KCkucG9zaXRpb247CisgICAgICAgICAgICAgICAg
bV9wcm9iYWJsZU1haW5UaHJlYWRTY3JvbGxQb3NpdGlvbiA9IEludFBvaW50KC1zY3JvbGxMYXll
clBvc2l0aW9uLngsIC1zY3JvbGxMYXllclBvc2l0aW9uLnkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNjcm9sbGluZ1RyZWUoKS0+c2Nyb2xsaW5nUGVyZm9ybWFu
Y2VMb2dnaW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgbG9nVGhyZWFkZWRTY3JvbGxpbmdNb2Rl
KG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsaW5n
VHJlZU5vZGVNYWM6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3
aGVlbEV2ZW50KQoreworICAgIGlmICghY2FuSGF2ZVNjcm9sbGJhcnMoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oYW5kbGVXaGVlbEV2ZW50
KHdoZWVsRXZlbnQpOworICAgIHNjcm9sbGluZ1RyZWUoKS0+aGFuZGxlV2hlZWxFdmVudFBoYXNl
KHdoZWVsRXZlbnQucGhhc2UoKSk7Cit9CisKK2Jvb2wgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OmFs
bG93c0hvcml6b250YWxTdHJldGNoaW5nKCkKK3sKKyAgICBzd2l0Y2ggKGhvcml6b250YWxTY3Jv
bGxFbGFzdGljaXR5KCkpIHsKKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWM6Cisg
ICAgICAgIHJldHVybiBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcigpIHx8ICFoYXNFbmFi
bGVkVmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25lOgor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QWxsb3dlZDoK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjphbGxv
d3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKQoreworICAgIHN3aXRjaCAodmVydGljYWxTY3JvbGxFbGFz
dGljaXR5KCkpIHsKKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWM6CisgICAgICAg
IHJldHVybiBoYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoKSB8fCAhaGFzRW5hYmxlZEhvcml6
b250YWxTY3JvbGxiYXIoKTsKKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25lOgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QWxsb3dlZDoKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitJbnRTaXplIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpzdHJldGNo
QW1vdW50KCkKK3sKKyAgICBJbnRTaXplIHN0cmV0Y2g7CisKKyAgICBpZiAoc2Nyb2xsUG9zaXRp
b24oKS55KCkgPCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpCisgICAgICAgIHN0cmV0Y2gu
c2V0SGVpZ2h0KHNjcm9sbFBvc2l0aW9uKCkueSgpIC0gbWluaW11bVNjcm9sbFBvc2l0aW9uKCku
eSgpKTsKKyAgICBlbHNlIGlmIChzY3JvbGxQb3NpdGlvbigpLnkoKSA+IG1heGltdW1TY3JvbGxQ
b3NpdGlvbigpLnkoKSkKKyAgICAgICAgc3RyZXRjaC5zZXRIZWlnaHQoc2Nyb2xsUG9zaXRpb24o
KS55KCkgLSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpOworCisgICAgaWYgKHNjcm9sbFBv
c2l0aW9uKCkueCgpIDwgbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueCgpKQorICAgICAgICBzdHJl
dGNoLnNldFdpZHRoKHNjcm9sbFBvc2l0aW9uKCkueCgpIC0gbWluaW11bVNjcm9sbFBvc2l0aW9u
KCkueCgpKTsKKyAgICBlbHNlIGlmIChzY3JvbGxQb3NpdGlvbigpLngoKSA+IG1heGltdW1TY3Jv
bGxQb3NpdGlvbigpLngoKSkKKyAgICAgICAgc3RyZXRjaC5zZXRXaWR0aChzY3JvbGxQb3NpdGlv
bigpLngoKSAtIG1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKSk7CisKKyAgICByZXR1cm4gc3Ry
ZXRjaDsKK30KKworYm9vbCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6cGlubmVkSW5EaXJlY3Rpb24o
Y29uc3QgRmxvYXRTaXplJiBkZWx0YSkKK3sKKyAgICBGbG9hdFNpemUgbGltaXREZWx0YTsKKwor
ICAgIGlmIChmYWJzZihkZWx0YS5oZWlnaHQoKSkgPj0gZmFic2YoZGVsdGEud2lkdGgoKSkpIHsK
KyAgICAgICAgaWYgKGRlbHRhLmhlaWdodCgpIDwgMCkgeworICAgICAgICAgICAgLy8gV2UgYXJl
IHRyeWluZyB0byBzY3JvbGwgdXAuICBNYWtlIHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhl
IHRvcAorICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQoc2Nyb2xsUG9zaXRpb24oKS55
KCkgLSBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgZG93bi4gIE1ha2Ugc3VyZSB3ZSBh
cmUgbm90IHBpbm5lZCB0byB0aGUgYm90dG9tCisgICAgICAgICAgICBsaW1pdERlbHRhLnNldEhl
aWdodChtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkgLSBzY3JvbGxQb3NpdGlvbigpLnkoKSk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGRlbHRhLndpZHRoKCkpIHsKKyAgICAgICAgaWYg
KGRlbHRhLndpZHRoKCkgPCAwKSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNj
cm9sbCBsZWZ0LiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVkIHRvIHRoZSBsZWZ0CisgICAg
ICAgICAgICBsaW1pdERlbHRhLnNldEhlaWdodChzY3JvbGxQb3NpdGlvbigpLngoKSAtIG1pbmlt
dW1TY3JvbGxQb3NpdGlvbigpLngoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCByaWdodC4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBp
bm5lZCB0byB0aGUgcmlnaHQKKyAgICAgICAgICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0KG1heGlt
dW1TY3JvbGxQb3NpdGlvbigpLngoKSAtIHNjcm9sbFBvc2l0aW9uKCkueCgpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmICgoZGVsdGEud2lkdGgoKSB8fCBkZWx0YS5oZWlnaHQoKSkgJiYg
KGxpbWl0RGVsdGEud2lkdGgoKSA8IDEgJiYgbGltaXREZWx0YS5oZWlnaHQoKSA8IDEpKSAgICAg
ICAgCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpjYW5TY3JvbGxIb3Jpem9udGFsbHkoKQoreworICAgIHJl
dHVybiBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcigpOworfQorCitib29sIFNjcm9sbGlu
Z1RyZWVOb2RlTWFjOjpjYW5TY3JvbGxWZXJ0aWNhbGx5KCkKK3sKKyAgICByZXR1cm4gaGFzRW5h
YmxlZFZlcnRpY2FsU2Nyb2xsYmFyKCk7Cit9CisKK2Jvb2wgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6
OnNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uKQor
eworICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCkKKyAgICAgICAgcmV0dXJuICFzY3Jv
bGxpbmdUcmVlKCktPmNhbkdvQmFjaygpOworICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsUmln
aHQpCisgICAgICAgIHJldHVybiAhc2Nyb2xsaW5nVHJlZSgpLT5jYW5Hb0ZvcndhcmQoKTsKKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworSW50UG9p
bnQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OmFic29sdXRlU2Nyb2xsUG9zaXRpb24oKQoreworICAg
IHJldHVybiBzY3JvbGxQb3NpdGlvbigpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFj
OjppbW1lZGlhdGVTY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKK3sKKyAgICBzY3Jv
bGxCeShyb3VuZGVkSW50U2l6ZShvZmZzZXQpKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlTm9k
ZU1hYzo6aW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25z
dCBGbG9hdFNpemUmIG9mZnNldCkKK3sKKyAgICBzY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNv
bnN0cmFpbnRzKHJvdW5kZWRJbnRTaXplKG9mZnNldCkpOworfQorCit2b2lkIFNjcm9sbGluZ1Ry
ZWVOb2RlTWFjOjpzdGFydFNuYXBSdWJiZXJiYW5kVGltZXIoKQoreworICAgIEFTU0VSVCghbV9z
bmFwUnViYmVyYmFuZFRpbWVyKTsKKworICAgIENGVGltZUludGVydmFsIHRpbWVySW50ZXJ2YWwg
PSAxLjAgLyA2MC4wOworCisgICAgbV9zbmFwUnViYmVyYmFuZFRpbWVyID0gYWRvcHRDRihDRlJ1
bkxvb3BUaW1lckNyZWF0ZVdpdGhIYW5kbGVyKGtDRkFsbG9jYXRvckRlZmF1bHQsIENGQWJzb2x1
dGVUaW1lR2V0Q3VycmVudCgpICsgdGltZXJJbnRlcnZhbCwgdGltZXJJbnRlcnZhbCwgMCwgMCwg
XihDRlJ1bkxvb3BUaW1lclJlZikgeworICAgICAgICBtX3Njcm9sbEVsYXN0aWNpdHlDb250cm9s
bGVyLnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZCgpOworICAgIH0pKTsKKyAgICBDRlJ1bkxvb3BB
ZGRUaW1lcihDRlJ1bkxvb3BHZXRDdXJyZW50KCksIG1fc25hcFJ1YmJlcmJhbmRUaW1lci5nZXQo
KSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1h
Yzo6c3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKQoreworICAgIGlmICghbV9zbmFwUnViYmVyYmFu
ZFRpbWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUo
bV9zbmFwUnViYmVyYmFuZFRpbWVyLmdldCgpKTsKKyAgICBtX3NuYXBSdWJiZXJiYW5kVGltZXIg
PSBudWxscHRyOworfQorCitJbnRQb2ludCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6c2Nyb2xsUG9z
aXRpb24oKSBjb25zdAoreworICAgIGlmIChzaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9u
T25NYWluVGhyZWFkKCkpCisgICAgICAgIHJldHVybiBtX3Byb2JhYmxlTWFpblRocmVhZFNjcm9s
bFBvc2l0aW9uOworCisgICAgQ0dQb2ludCBzY3JvbGxMYXllclBvc2l0aW9uID0gbV9zY3JvbGxM
YXllci5nZXQoKS5wb3NpdGlvbjsKKyAgICByZXR1cm4gSW50UG9pbnQoLXNjcm9sbExheWVyUG9z
aXRpb24ueCArIHNjcm9sbE9yaWdpbigpLngoKSwgLXNjcm9sbExheWVyUG9zaXRpb24ueSArIHNj
cm9sbE9yaWdpbigpLnkoKSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OnNldFNj
cm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKK3sKKyAgICBJbnRQ
b2ludCBuZXdTY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOworICAgIG5ld1Njcm9sbFBv
c2l0aW9uID0gbmV3U2Nyb2xsUG9zaXRpb24uc2hydW5rVG8obWF4aW11bVNjcm9sbFBvc2l0aW9u
KCkpOworICAgIG5ld1Njcm9sbFBvc2l0aW9uID0gbmV3U2Nyb2xsUG9zaXRpb24uZXhwYW5kZWRU
byhtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSk7CisKKyAgICBzZXRTY3JvbGxQb3NpdGlvbldpdGhv
dXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKG5ld1Njcm9sbFBvc2l0aW9uKTsKKworICAgIGlmIChz
Y3JvbGxpbmdUcmVlKCktPnNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoKSkKKyAg
ICAgICAgbG9nRXhwb3NlZFVuZmlsbGVkQXJlYSgpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVO
b2RlTWFjOjpzZXRTY3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGNv
bnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKK3sKKyAgICB1cGRhdGVNYWluRnJhbWVQaW5T
dGF0ZShzY3JvbGxQb3NpdGlvbik7CisKKyAgICBpZiAoc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQ
b3NpdGlvbk9uTWFpblRocmVhZCgpKSB7CisgICAgICAgIG1fcHJvYmFibGVNYWluVGhyZWFkU2Ny
b2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKKyAgICAgICAgc2Nyb2xsaW5nVHJlZSgpLT51
cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExheWVyUG9zaXRpb24oc2Nyb2xs
UG9zaXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc2V0U2Nyb2xsTGF5ZXJQ
b3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CisgICAgc2Nyb2xsaW5nVHJlZSgpLT51cGRhdGVNYWlu
RnJhbWVTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7Cit9CisKK3ZvaWQgU2Nyb2xsaW5n
VHJlZU5vZGVNYWM6OnNldFNjcm9sbExheWVyUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHBvc2l0
aW9uKQoreworICAgIEFTU0VSVCghc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFp
blRocmVhZCgpKTsKKyAgICBtX3Njcm9sbExheWVyLmdldCgpLnBvc2l0aW9uID0gQ0dQb2ludE1h
a2UoLXBvc2l0aW9uLngoKSArIHNjcm9sbE9yaWdpbigpLngoKSwgLXBvc2l0aW9uLnkoKSArIHNj
cm9sbE9yaWdpbigpLnkoKSk7Cit9CisKK0ludFBvaW50IFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpt
aW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIHJldHVybiBJbnRQb2ludCgwLCAw
KTsKK30KKworSW50UG9pbnQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6Om1heGltdW1TY3JvbGxQb3Np
dGlvbigpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcG9zaXRpb24oY29udGVudHNTaXplKCkud2lk
dGgoKSAtIHZpZXdwb3J0UmVjdCgpLndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgY29u
dGVudHNTaXplKCkuaGVpZ2h0KCkgLSB2aWV3cG9ydFJlY3QoKS5oZWlnaHQoKSk7CisKKyAgICBw
b3NpdGlvbi5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisKKyAgICByZXR1cm4gcG9zaXRpb247Cit9
CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIG9m
ZnNldCkKK3sKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpICsgb2Zmc2V0
KTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6c2Nyb2xsQnlXaXRob3V0Q29udGVu
dEVkZ2VDb25zdHJhaW50cyhjb25zdCBJbnRTaXplJiBvZmZzZXQpCit7CisgICAgc2V0U2Nyb2xs
UG9zaXRpb25XaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhzY3JvbGxQb3NpdGlvbigpICsg
b2Zmc2V0KTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6dXBkYXRlTWFpbkZyYW1l
UGluU3RhdGUoY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQoreworICAgIGJvb2wgcGlu
bmVkVG9UaGVMZWZ0ID0gc2Nyb2xsUG9zaXRpb24ueCgpIDw9IG1pbmltdW1TY3JvbGxQb3NpdGlv
bigpLngoKTsKKyAgICBib29sIHBpbm5lZFRvVGhlUmlnaHQgPSBzY3JvbGxQb3NpdGlvbi54KCkg
Pj0gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueCgpOworCisgICAgc2Nyb2xsaW5nVHJlZSgpLT5z
ZXRNYWluRnJhbWVQaW5TdGF0ZShwaW5uZWRUb1RoZUxlZnQsIHBpbm5lZFRvVGhlUmlnaHQpOwor
fQorCit2b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpsb2dFeHBvc2VkVW5maWxsZWRBcmVhKCkK
K3sKKyAgICBSZWdpb24gcGFpbnRlZFZpc2libGVUaWxlczsKKworICAgIERlcXVlPENBTGF5ZXIq
PiBsYXllclF1ZXVlOworICAgIGxheWVyUXVldWUuYXBwZW5kKG1fc2Nyb2xsTGF5ZXIuZ2V0KCkp
OworICAgIFdlYlRpbGVMYXllckxpc3QgdGlsZXM7CisKKyAgICB3aGlsZSghbGF5ZXJRdWV1ZS5p
c0VtcHR5KCkgJiYgdGlsZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIENBTGF5ZXIqIGxheWVyID0g
bGF5ZXJRdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAgTlNBcnJheSogc3VibGF5ZXJzID0gW1ts
YXllciBzdWJsYXllcnNdIGNvcHldOworCisgICAgICAgIC8vIElmIHRoaXMgbGF5ZXIgaXMgdGhl
IHBhcmVudCBvZiBhIHRpbGUsIGl0IGlzIHRoZSBwYXJlbnQgb2YgYWxsIG9mIHRoZSB0aWxlcyBh
bmQgbm90aGluZyBlbHNlLgorICAgICAgICBpZiAoW1tzdWJsYXllcnMgb2JqZWN0QXRJbmRleDow
XSBpc0tpbmRPZkNsYXNzOltXZWJUaWxlTGF5ZXIgY2xhc3NdXSkgeworICAgICAgICAgICAgZm9y
IChDQUxheWVyKiBzdWJsYXllciBpbiBzdWJsYXllcnMpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoW3N1YmxheWVyIGlzS2luZE9mQ2xhc3M6W1dlYlRpbGVMYXllciBjbGFzc11dKTsKKyAgICAg
ICAgICAgICAgICB0aWxlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8V2ViVGlsZUxheWVyKj4oc3VibGF5
ZXIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAo
Q0FMYXllciogc3VibGF5ZXIgaW4gc3VibGF5ZXJzKQorICAgICAgICAgICAgICAgIGxheWVyUXVl
dWUuYXBwZW5kKHN1YmxheWVyKTsKKyAgICAgICAgfQorCisgICAgICAgIFtzdWJsYXllcnMgcmVs
ZWFzZV07CisgICAgfQorCisgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24gPSB0aGlzLT5zY3Jv
bGxQb3NpdGlvbigpOworICAgIHVuc2lnbmVkIHVuZmlsbGVkQXJlYSA9IFRpbGVDYWNoZTo6Ymxh
bmtQaXhlbENvdW50Rm9yVGlsZXModGlsZXMsIHZpZXdwb3J0UmVjdCgpLCBJbnRQb2ludCgtc2Ny
b2xsUG9zaXRpb24ueCgpLCAtc2Nyb2xsUG9zaXRpb24ueSgpKSk7CisKKyAgICBpZiAodW5maWxs
ZWRBcmVhKQorICAgICAgICBXVEZMb2dBbHdheXMoIlNDUk9MTElORzogRXhwb3NlZCB0aWxlbGVz
cyBhcmVhLiBUaW1lOiAlZiBVbmZpbGxlZCBQaXhlbHM6ICV1XG4iLCBXVEY6Om1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZSgpLCB1bmZpbGxlZEFyZWEpOworfQorCitzdGF0aWMgdm9pZCBsb2dU
aHJlYWRlZFNjcm9sbGluZ01vZGUodW5zaWduZWQgbWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMp
Cit7CisgICAgaWYgKG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKSB7CisgICAgICAgIFN0cmlu
Z0J1aWxkZXIgcmVhc29uc0Rlc2NyaXB0aW9uOworCisgICAgICAgIGlmIChtYWluVGhyZWFkU2Ny
b2xsaW5nUmVhc29ucyAmIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpGb3JjZWRPbk1haW5UaHJlYWQp
CisgICAgICAgICAgICByZWFzb25zRGVzY3JpcHRpb24uYXBwZW5kKCJmb3JjZWQsIik7CisgICAg
ICAgIGlmIChtYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyAmIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpIYXNTbG93UmVwYWludE9iamVjdHMpCisgICAgICAgICAgICByZWFzb25zRGVzY3JpcHRpb24u
YXBwZW5kKCJzbG93LXJlcGFpbnQgb2JqZWN0cywiKTsKKyAgICAgICAgaWYgKG1haW5UaHJlYWRT
Y3JvbGxpbmdSZWFzb25zICYgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6Okhhc1ZpZXdwb3J0Q29uc3Ry
YWluZWRPYmplY3RzV2l0aG91dFN1cHBvcnRpbmdGaXhlZExheWVycykKKyAgICAgICAgICAgIHJl
YXNvbnNEZXNjcmlwdGlvbi5hcHBlbmQoInZpZXdwb3J0LWNvbnN0cmFpbmVkIG9iamVjdHMsIik7
CisgICAgICAgIGlmIChtYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyAmIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpIYXNOb25MYXllckZpeGVkT2JqZWN0cykKKyAgICAgICAgICAgIHJlYXNvbnNEZXNj
cmlwdGlvbi5hcHBlbmQoIm5vbi1sYXllciB2aWV3cG9ydC1jb25zdHJhaW5lZCBvYmplY3RzLCIp
OworICAgICAgICBpZiAobWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMgJiBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6SXNJbWFnZURvY3VtZW50KQorICAgICAgICAgICAgcmVhc29uc0Rlc2NyaXB0aW9u
LmFwcGVuZCgiaW1hZ2UgZG9jdW1lbnQsIik7CisKKyAgICAgICAgLy8gU3RyaXAgdGhlIHRyYWls
aW5nIGNvbW1hLgorICAgICAgICBTdHJpbmcgcmVhc29uc0Rlc2NyaXB0aW9uVHJpbW1lZCA9IHJl
YXNvbnNEZXNjcmlwdGlvbi50b1N0cmluZygpLmxlZnQocmVhc29uc0Rlc2NyaXB0aW9uLmxlbmd0
aCgpIC0gMSk7CisKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJTQ1JPTExJTkc6IFN3aXRjaGluZyB0
byBtYWluLXRocmVhZCBzY3JvbGxpbmcgbW9kZS4gVGltZTogJWYgUmVhc29uKHMpOiAlc1xuIiwg
V1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSwgcmVhc29uc0Rlc2NyaXB0aW9uVHJp
bW1lZC5hc2NpaSgpLmRhdGEoKSk7CisgICAgfSBlbHNlCisgICAgICAgIFdURkxvZ0Fsd2F5cygi
U0NST0xMSU5HOiBTd2l0Y2hpbmcgdG8gdGhyZWFkZWQgc2Nyb2xsaW5nIG1vZGUuIFRpbWU6ICVm
XG4iLCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0JKHJldmlzaW9uIDEzMTEzNikK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdUcmVlTm9kZU1hYy5oIgorI2lu
Y2x1ZGUgIlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLmgiCiAKICNpZiBFTkFCTEUoVEhS
RUFERURfU0NST0xMSU5HKQogCkBAIC00NSwyNiArNDUsMjcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBzdGF0aWMgdm9pZCBsb2dUaHJlYWRlZFNjcm9sbGluZ01vZGUodW5zaWduZWQgbWFpblRo
cmVhZFNjcm9sbGluZ1JlYXNvbnMpOwogCi1QYXNzT3duUHRyPFNjcm9sbGluZ1RyZWVOb2RlPiBT
Y3JvbGxpbmdUcmVlTm9kZTo6Y3JlYXRlKFNjcm9sbGluZ1RyZWUqIHNjcm9sbGluZ1RyZWUpCitQ
YXNzT3duUHRyPFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlPiBTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZTo6Y3JlYXRlKFNjcm9sbGluZ1RyZWUqIHNjcm9sbGluZ1RyZWUpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxpbmdUcmVlTm9kZU1hYyhzY3JvbGxpbmdUcmVlKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYyhzY3Jv
bGxpbmdUcmVlKSk7CiB9CiAKLVNjcm9sbGluZ1RyZWVOb2RlTWFjOjpTY3JvbGxpbmdUcmVlTm9k
ZU1hYyhTY3JvbGxpbmdUcmVlKiBzY3JvbGxpbmdUcmVlKQotICAgIDogU2Nyb2xsaW5nVHJlZU5v
ZGUoc2Nyb2xsaW5nVHJlZSkKK1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZU1hYyhTY3JvbGxpbmdUcmVlKiBzY3JvbGxpbmdUcmVlKQorICAg
IDogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUoc2Nyb2xsaW5nVHJlZSkKICAgICAsIG1fc2Ny
b2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIodGhpcykKIHsKIH0KIAotU2Nyb2xsaW5nVHJlZU5vZGVN
YWM6On5TY3JvbGxpbmdUcmVlTm9kZU1hYygpCitTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1h
Yzo6flNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjKCkKIHsKICAgICBpZiAobV9zbmFwUnVi
YmVyYmFuZFRpbWVyKQogICAgICAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUobV9zbmFwUnVi
YmVyYmFuZFRpbWVyLmdldCgpKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6dXBk
YXRlKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGUpCit2b2lkIFNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlTWFjOjp1cGRhdGUoU2Nyb2xsaW5nU3RhdGVOb2RlKiBzdGF0ZU5vZGUp
CiB7Ci0gICAgU2Nyb2xsaW5nVHJlZU5vZGU6OnVwZGF0ZShzdGF0ZSk7CisgICAgU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGU6OnVwZGF0ZShzdGF0ZU5vZGUpOworICAgIFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZSogc3RhdGUgPSB0b1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZShzdGF0
ZU5vZGUpOwogCiAgICAgaWYgKHN0YXRlLT5zY3JvbGxMYXllckRpZENoYW5nZSgpKQogICAgICAg
ICBtX3Njcm9sbExheWVyID0gc3RhdGUtPnBsYXRmb3JtU2Nyb2xsTGF5ZXIoKTsKQEAgLTk0LDcg
Kzk1LDcgQEAgdm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6dXBkYXRlKFNjcm9sbAogICAgIH0K
IH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlTWFjOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hl
ZWxFdmVudCkKIHsKICAgICBpZiAoIWNhbkhhdmVTY3JvbGxiYXJzKCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTEwMyw3ICsxMDQsNyBAQCB2b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpoYW5kbGVX
aGVlbEV2CiAgICAgc2Nyb2xsaW5nVHJlZSgpLT5oYW5kbGVXaGVlbEV2ZW50UGhhc2Uod2hlZWxF
dmVudC5waGFzZSgpKTsKIH0KIAotYm9vbCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6YWxsb3dzSG9y
aXpvbnRhbFN0cmV0Y2hpbmcoKQorYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6
YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKQogewogICAgIHN3aXRjaCAoaG9yaXpvbnRhbFNj
cm9sbEVsYXN0aWNpdHkoKSkgewogICAgIGNhc2UgU2Nyb2xsRWxhc3RpY2l0eUF1dG9tYXRpYzoK
QEAgLTExOCw3ICsxMTksNyBAQCBib29sIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjphbGxvd3NIb3Jp
em9uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjph
bGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKQorYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZU1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKCkKIHsKICAgICBzd2l0Y2ggKHZlcnRpY2Fs
U2Nyb2xsRWxhc3RpY2l0eSgpKSB7CiAgICAgY2FzZSBTY3JvbGxFbGFzdGljaXR5QXV0b21hdGlj
OgpAQCAtMTMzLDcgKzEzNCw3IEBAIGJvb2wgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OmFsbG93c1Zl
cnRpY2EKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUludFNpemUgU2Nyb2xsaW5nVHJlZU5vZGVN
YWM6OnN0cmV0Y2hBbW91bnQoKQorSW50U2l6ZSBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1h
Yzo6c3RyZXRjaEFtb3VudCgpCiB7CiAgICAgSW50U2l6ZSBzdHJldGNoOwogCkBAIC0xNTAsNyAr
MTUxLDcgQEAgSW50U2l6ZSBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6c3RyZXRjaEFtbwogICAgIHJl
dHVybiBzdHJldGNoOwogfQogCi1ib29sIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpwaW5uZWRJbkRp
cmVjdGlvbihjb25zdCBGbG9hdFNpemUmIGRlbHRhKQorYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZU1hYzo6cGlubmVkSW5EaXJlY3Rpb24oY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKIHsK
ICAgICBGbG9hdFNpemUgbGltaXREZWx0YTsKIApAQCAtMTc4LDE3ICsxNzksMTcgQEAgYm9vbCBT
Y3JvbGxpbmdUcmVlTm9kZU1hYzo6cGlubmVkSW5EaXJlYwogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYm9vbCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6Y2FuU2Nyb2xsSG9yaXpvbnRhbGx5KCkKK2Jv
b2wgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OmNhblNjcm9sbEhvcml6b250YWxseSgp
CiB7CiAgICAgcmV0dXJuIGhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKCk7CiB9CiAKLWJv
b2wgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OmNhblNjcm9sbFZlcnRpY2FsbHkoKQorYm9vbCBTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6Y2FuU2Nyb2xsVmVydGljYWxseSgpCiB7CiAgICAg
cmV0dXJuIGhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcigpOwogfQogCi1ib29sIFNjcm9sbGlu
Z1RyZWVOb2RlTWFjOjpzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24oU2Nyb2xsRGlyZWN0aW9u
IGRpcmVjdGlvbikKK2Jvb2wgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OnNob3VsZFJ1
YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIGlm
IChkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCkKICAgICAgICAgcmV0dXJuICFzY3JvbGxpbmdUcmVl
KCktPmNhbkdvQmFjaygpOwpAQCAtMTk5LDIyICsyMDAsMjIgQEAgYm9vbCBTY3JvbGxpbmdUcmVl
Tm9kZU1hYzo6c2hvdWxkUnViYmVyQgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotSW50UG9pbnQg
U2Nyb2xsaW5nVHJlZU5vZGVNYWM6OmFic29sdXRlU2Nyb2xsUG9zaXRpb24oKQorSW50UG9pbnQg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OmFic29sdXRlU2Nyb2xsUG9zaXRpb24oKQog
ewogICAgIHJldHVybiBzY3JvbGxQb3NpdGlvbigpOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVO
b2RlTWFjOjppbW1lZGlhdGVTY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKK3ZvaWQg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5KGNvbnN0IEZs
b2F0U2l6ZSYgb2Zmc2V0KQogewogICAgIHNjcm9sbEJ5KHJvdW5kZWRJbnRTaXplKG9mZnNldCkp
OwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjppbW1lZGlhdGVTY3JvbGxCeVdpdGhv
dXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQordm9pZCBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6aW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29u
dGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKIHsKICAgICBzY3Jv
bGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKHJvdW5kZWRJbnRTaXplKG9mZnNldCkp
OwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpzdGFydFNuYXBSdWJiZXJiYW5kVGlt
ZXIoKQordm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6c3RhcnRTbmFwUnViYmVy
YmFuZFRpbWVyKCkKIHsKICAgICBBU1NFUlQoIW1fc25hcFJ1YmJlcmJhbmRUaW1lcik7CiAKQEAg
LTIyNiw3ICsyMjcsNyBAQCB2b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpzdGFydFNuYXBSdWJi
CiAgICAgQ0ZSdW5Mb29wQWRkVGltZXIoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBtX3NuYXBSdWJi
ZXJiYW5kVGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CiB9CiAKLXZvaWQgU2Ny
b2xsaW5nVHJlZU5vZGVNYWM6OnN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCkKK3ZvaWQgU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OnN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKCkKIHsKICAg
ICBpZiAoIW1fc25hcFJ1YmJlcmJhbmRUaW1lcikKICAgICAgICAgcmV0dXJuOwpAQCAtMjM1LDcg
KzIzNiw3IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OnN0b3BTbmFwUnViYmUKICAgICBt
X3NuYXBSdWJiZXJiYW5kVGltZXIgPSBudWxscHRyOwogfQogCi1JbnRQb2ludCBTY3JvbGxpbmdU
cmVlTm9kZU1hYzo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAorSW50UG9pbnQgU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVNYWM6OnNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsKICAgICBpZiAoc2hv
dWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpKQogICAgICAgICByZXR1
cm4gbV9wcm9iYWJsZU1haW5UaHJlYWRTY3JvbGxQb3NpdGlvbjsKQEAgLTI0NCw3ICsyNDUsNyBA
QCBJbnRQb2ludCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6c2Nyb2xsUG9zCiAgICAgcmV0dXJuIElu
dFBvaW50KC1zY3JvbGxMYXllclBvc2l0aW9uLnggKyBzY3JvbGxPcmlnaW4oKS54KCksIC1zY3Jv
bGxMYXllclBvc2l0aW9uLnkgKyBzY3JvbGxPcmlnaW4oKS55KCkpOwogfQogCi12b2lkIFNjcm9s
bGluZ1RyZWVOb2RlTWFjOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xs
UG9zaXRpb24pCit2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpzZXRTY3JvbGxQ
b3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiB7CiAgICAgSW50UG9pbnQg
bmV3U2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKICAgICBuZXdTY3JvbGxQb3NpdGlv
biA9IG5ld1Njcm9sbFBvc2l0aW9uLnNocnVua1RvKG1heGltdW1TY3JvbGxQb3NpdGlvbigpKTsK
QEAgLTI1Niw3ICsyNTcsNyBAQCB2b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpzZXRTY3JvbGxQ
b3NpCiAgICAgICAgIGxvZ0V4cG9zZWRVbmZpbGxlZEFyZWEoKTsKIH0KIAotdm9pZCBTY3JvbGxp
bmdUcmVlTm9kZU1hYzo6c2V0U2Nyb2xsUG9zaXRpb25XaXRob3V0Q29udGVudEVkZ2VDb25zdHJh
aW50cyhjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCit2b2lkIFNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlTWFjOjpzZXRTY3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50RWRnZUNvbnN0
cmFpbnRzKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKIHsKICAgICB1cGRhdGVNYWlu
RnJhbWVQaW5TdGF0ZShzY3JvbGxQb3NpdGlvbik7CiAKQEAgLTI3MCwxOCArMjcxLDE4IEBAIHZv
aWQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OnNldFNjcm9sbFBvc2kKICAgICBzY3JvbGxpbmdUcmVl
KCktPnVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsKIH0KIAot
dm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6c2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihjb25zdCBJ
bnRQb2ludCYgcG9zaXRpb24pCit2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpz
ZXRTY3JvbGxMYXllclBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBwb3NpdGlvbikKIHsKICAgICBB
U1NFUlQoIXNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKSk7CiAg
ICAgbV9zY3JvbGxMYXllci5nZXQoKS5wb3NpdGlvbiA9IENHUG9pbnRNYWtlKC1wb3NpdGlvbi54
KCkgKyBzY3JvbGxPcmlnaW4oKS54KCksIC1wb3NpdGlvbi55KCkgKyBzY3JvbGxPcmlnaW4oKS55
KCkpOwogfQogCi1JbnRQb2ludCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6bWluaW11bVNjcm9sbFBv
c2l0aW9uKCkgY29uc3QKK0ludFBvaW50IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpt
aW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewogICAgIHJldHVybiBJbnRQb2ludCgwLCAw
KTsKIH0KIAotSW50UG9pbnQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6Om1heGltdW1TY3JvbGxQb3Np
dGlvbigpIGNvbnN0CitJbnRQb2ludCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6bWF4
aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsKICAgICBJbnRQb2ludCBwb3NpdGlvbihjb250
ZW50c1NpemUoKS53aWR0aCgpIC0gdmlld3BvcnRSZWN0KCkud2lkdGgoKSwKICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIHZpZXdwb3J0UmVjdCgpLmhlaWdo
dCgpKTsKQEAgLTI5MSwxNyArMjkyLDE3IEBAIEludFBvaW50IFNjcm9sbGluZ1RyZWVOb2RlTWFj
OjptYXhpbXVtU2MKICAgICByZXR1cm4gcG9zaXRpb247CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJl
ZU5vZGVNYWM6OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIG9mZnNldCkKK3ZvaWQgU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVNYWM6OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIG9mZnNldCkKIHsK
ICAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbigpICsgb2Zmc2V0KTsKIH0KIAot
dm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6c2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25z
dHJhaW50cyhjb25zdCBJbnRTaXplJiBvZmZzZXQpCit2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlTWFjOjpzY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGNvbnN0IElu
dFNpemUmIG9mZnNldCkKIHsKICAgICBzZXRTY3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50RWRn
ZUNvbnN0cmFpbnRzKHNjcm9sbFBvc2l0aW9uKCkgKyBvZmZzZXQpOwogfQogCi12b2lkIFNjcm9s
bGluZ1RyZWVOb2RlTWFjOjp1cGRhdGVNYWluRnJhbWVQaW5TdGF0ZShjb25zdCBJbnRQb2ludCYg
c2Nyb2xsUG9zaXRpb24pCit2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjp1cGRh
dGVNYWluRnJhbWVQaW5TdGF0ZShjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiB7CiAg
ICAgYm9vbCBwaW5uZWRUb1RoZUxlZnQgPSBzY3JvbGxQb3NpdGlvbi54KCkgPD0gbWluaW11bVNj
cm9sbFBvc2l0aW9uKCkueCgpOwogICAgIGJvb2wgcGlubmVkVG9UaGVSaWdodCA9IHNjcm9sbFBv
c2l0aW9uLngoKSA+PSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54KCk7CkBAIC0zMDksNyArMzEw
LDcgQEAgdm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6dXBkYXRlTWFpbkZyYQogICAgIHNjcm9s
bGluZ1RyZWUoKS0+c2V0TWFpbkZyYW1lUGluU3RhdGUocGlubmVkVG9UaGVMZWZ0LCBwaW5uZWRU
b1RoZVJpZ2h0KTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6bG9nRXhwb3NlZFVu
ZmlsbGVkQXJlYSgpCit2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpsb2dFeHBv
c2VkVW5maWxsZWRBcmVhKCkKIHsKICAgICBSZWdpb24gcGFpbnRlZFZpc2libGVUaWxlczsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168564</attachid>
            <date>2012-10-13 13:13:50 -0700</date>
            <delta_ts>2012-10-16 10:33:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>87911</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMTI2MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOSBAQAorMjAxMi0xMC0xMyAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk5MjU0CisgICAgICAgIE1ha2UgU2Nyb2xsaW5nVHJlZSBhbiBh
Y3R1YWwgdHJlZSBvZiBub2RlcywgYW5kIGhhdmUgaXQgcmVmbGVjdCB0aGUgCisgICAgICAgIFNj
cm9sbGluZ1N0YXRlVHJlZQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggZmluYWxseSBtYWtlcyB0aGUgU2Nyb2xsaW5nVHJlZSBvdmVy
IG9uIHRoZSAKKyAgICAgICAgU2Nyb2xsaW5nVGhyZWFkIGF3YXJlIG9mIHRoZSBjaGFuZ2VzIHRo
YXQgd2UgaGF2ZSBiZWVuIG1ha2luZyB0byB0aGUgCisgICAgICAgIFNjcm9sbGluZ1N0YXRlVHJl
ZS4KKworICAgICAgICBGaXJzdCwgaXQgbWFrZXMgU2Nyb2xsaW5nVHJlZU5vZGUgYSBtdWNoIG1v
cmUgZ2VuZXJpYyBjbGFzcywgc2ltaWxhciAKKyAgICAgICAgdG8gU2Nyb2xsaW5nU3RhdGVOb2Rl
LiBJdCBpcyBhbiBhYnN0cmFjdCBjbGFzcyBhbmQgd2Ugd2lsbCBhZGQgb3RoZXIgCisgICAgICAg
IHR5cGVzIG9mIG5vZGVzIHN1Y2ggYXMgU2Nyb2xsaW5nVHJlZUZpeGVkTm9kZXMgdGhhdCB3aWxs
IGluaGVyaXQgZnJvbSAKKyAgICAgICAgdGhpcyBjbGFzcy4gCisKKyAgICAgICAgQWxsIG9mIHRo
ZSBzY3JvbGxpbmcgZnVuY3Rpb25hbGl0eSB0aGF0IHdhcyBpbiBTY3JvbGxpbmdUcmVlTm9kZSBo
YXMgCisgICAgICAgIGJlZW4gbW92ZWQgdG8gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuIEFu
ZCBsaWtld2lzZSwgCisgICAgICAgIFNjcm9sbGluZ1RyZWVOb2RlTWFjIGhhcyBiZWVuIHJlLW5h
bWVkIHRvIAorICAgICAgICBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy4gCisKKyAgICAg
ICAgQW5kIGZpbmFsbHksIGluc3RlYWQgb2YganVzdCB1cGRhdGluZyBhbmQgY3JlYXRpbmcgdGhl
IHJvb3Qgbm9kZSwgCisgICAgICAgIFNjcm9sbGluZ1RyZWUgbm93IHJlY3Vyc2VzIHRocm91Z2gg
dGhlIHdob2xlIFNjcm9sbGluZ1N0YXRlVHJlZSB0byAKKyAgICAgICAgY3JlYXRlIGFuZCB1cGRh
dGUgYSBmdWxsIHRyZWUgb2Ygbm9kZXMuCisKKyAgICAgICAgTmV3IGZpbGVzIGFuZCBtb3ZlcyBm
aWxlcy4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAg
ICAgICAgQWRkIGEgZ2V0dGVyIGZvciB0aGUgY2hpbGRyZW4gdmVjdG9yIHNpbmNlIHdlIG5lZWQg
dG8gcmVjdXJzZSBpdCBpbiAKKyAgICAgICAgU2Nyb2xsaW5nVHJlZS4KKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ1N0YXRlTm9kZTo6Y2hpbGRyZW4pOgorICAgICAgICAoU2Nyb2xsaW5nU3RhdGVOb2RlKToK
KworICAgICAgICBtX3Jvb3ROb2RlIGlzIG5vdyBhIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
LgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nVHJlZTo6U2Nyb2xsaW5nVHJlZSk6CisKKyAgICAgICAgSW5zdGVh
ZCBvZiBqdXN0IHVwZGF0aW5nIHRoZSByb290IG5vZGUsIGNhbGwgdHdvIG5ldyBmdW5jdGlvbnMg
dGhhdCAKKyAgICAgICAgd2lsbCB0YWtlIGNhcmUgb2YgdXBkYXRpbmcgdGhlIHdob2xlIHRyZWUu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlOjpjb21taXROZXdUcmVlU3RhdGUpOgor
CisgICAgICAgIFRoaXMgZnVuY3Rpb24gZWN1cnNlcyB0aHJvdWdoIHRoZSBTY3JvbGxpbmdTdGF0
ZVRyZWUgYW5kIHVwZGF0ZXMgdGhlIAorICAgICAgICBjb3JyZXNwb25kaW5nIFNjcm9sbGluZ1Ry
ZWVOb2Rlcy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWU6OnVwZGF0ZU5vZGVzRnJv
bVN0YXRlTm9kZSk6CisKKyAgICAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyB0aGUgU2Nyb2xsaW5n
U3RhdGVUcmVlJ3MgbGlzdCBvZiByZW1vdmVkIG5vZGVzIAorICAgICAgICBhbmQgcmVtb3ZlcyB0
aGUgY29ycmVzcG9uZGluZyBub2RlcyBmcm9tIHRoZSBTY3JvbGxpbmdUcmVlLiBJdCB3aWxsIAor
ICAgICAgICBkZXN0cm95IHRoZSBub2RlcyBhZnRlciByZW1vdmluZyBpdCBhcyBsb25nIGFzIGl0
J3Mgbm90IHRoZSByb290IAorICAgICAgICBub2RlLiBJIHRoaW5rIGl0J3MgdGhlIHNhZmVzdCBj
aG9pY2UgZm9yIG5vdyB0byBuZXZlciByZW1vdmUgdGhlIHJvb3QgCisgICAgICAgIG5vZGUuIAor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZTo6cmVtb3ZlRGVzdHJveWVkTm9kZXMpOgor
CisgICAgICAgIFNjcm9sbGluZ1RyZWUgbm93IGtlZXBzIGEgSGFzaE1hcCBtYXBwaW5nIFNjcm9s
bGluZ05vZGVJRHMgdG8gCisgICAgICAgIFNjcm9sbGluZ1RyZWVOb2Rlcy4KKyAgICAgICAgKiBw
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmg6CisKKyAgICAgICAgQWxsIG9mIHRoZSBzY3Jv
bGxpbmctcmVsYXRlZCBmdW5jdGlvbmFsaXR5IGhhcyBiZWVuIG1vdmVkIGZyb20gdGhpcyAKKyAg
ICAgICAgY2xhc3MgdG8gbmV3IGNsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLiBBbmQg
c29tZSBiYXNpYyB0cmVlIAorICAgICAgICB0cmF2ZXJzYWwgZnVuY3Rpb25hbGl0eSBoYXMgYmVl
biBhZGRlZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9kZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlTm9kZTo6U2Nyb2xsaW5nVHJlZU5vZGUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZU5vZGU6OmFwcGVuZENoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVOb2RlOjpyZW1vdmVDaGlsZCk6CisgICAgICAg
ICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoU2Nyb2xsaW5nVHJlZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nVHJlZU5vZGU6OnNjcm9sbGluZ05vZGVJRCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdUcmVlTm9kZTo6c2V0U2Nyb2xsaW5nTm9kZUlEKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ1RyZWVOb2RlOjpwYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZU5v
ZGU6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlTm9kZTo6c2Ny
b2xsaW5nVHJlZSk6CisKKyAgICAgICAgVGhpcyBjbGFzcyBjb250YWlucyBhbGwgb2YgdGhlIHNj
cm9sbGluZy1yZWxhdGVkIHdvcmsgdGhhdCB1c2VkIHRvIGJlIAorICAgICAgICBkb25lIGluIFNj
cm9sbGluZ1RyZWVOb2RlLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6flNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlOjp1cGRhdGUpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6c2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9u
TWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZTo6dmlld3BvcnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlOjpjb250ZW50c1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGU6Omhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjp2ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6Omhhc0VuYWJs
ZWRIb3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlOjpoYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OmNhbkhhdmVTY3JvbGxiYXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlOjpzY3JvbGxPcmlnaW4p
OgorCisgICAgICAgIEkgbm90aWNlZCB0aGlzIHdoaXRlc3BhY2UgZXJyb3IgYW5kIGhhZCB0byBm
aXggaXQuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9y
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWM6OmRldGFj
aEZyb21TdGF0ZVRyZWUpOgorCisgICAgICAgIEluY2x1ZGUgU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVNYWMuaCBpbnN0ZWFkIG9mIAorICAgICAgICBTY3JvbGxpbmdUcmVlTm9kZU1hYy5oCisg
ICAgICAgICogcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVNYWMubW06CisKKyAgICAg
ICAgVGhpcyBjbGFzcyB3YXMganVzdCByZS1uYW1lZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nVHJlZU5vZGVNYWMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU5vZGVNYWMubW06IFJlbW92ZWQuCisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLmg6IENvcGll
ZCBmcm9tIHBhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlTm9kZU1hYy5oLgorICAgICAg
ICAoU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMpOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xs
aW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbTogQ29waWVkIGZyb20gcGFn
ZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVOb2RlTWFjLm1tLgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVNYWMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6
On5TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYyk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6dXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjphbGxvd3NIb3Jpem9udGFs
U3RyZXRjaGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9k
ZU1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpzdHJldGNoQW1vdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpwaW5uZWRJbkRpcmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6Y2FuU2Nyb2xs
SG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlTWFjOjpjYW5TY3JvbGxWZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OmFic29sdXRlU2Ny
b2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05v
ZGVNYWM6OmltbWVkaWF0ZVNjcm9sbEJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlTWFjOjppbW1lZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNv
bnN0cmFpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
TWFjOjpzdGFydFNuYXBSdWJiZXJiYW5kVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OnN0b3BTbmFwUnViYmVyYmFuZFRpbWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpzY3JvbGxQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6c2V0
U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVNYWM6OnNldFNjcm9sbFBvc2l0aW9uV2l0aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OnNldFNj
cm9sbExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9s
bGluZ05vZGVNYWM6Om1pbmltdW1TY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpzY3JvbGxCeSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6c2Nyb2xs
QnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6dXBkYXRlTWFpbkZyYW1lUGluU3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OmxvZ0V4cG9zZWRV
bmZpbGxlZEFyZWEpOgorCiAyMDEyLTEwLTEzICBDaHJpcyBSb2dlcnMgIDxjcm9nZXJzQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgV2ViQXVkaW9CdXMgbmVlZHMgc3VwcG9ydCBmb3IgcmVzaXppbmcg
YnVzIHRvIGEgc21hbGxlciBzaXplCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzEyNjIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTUwOCw4ICs1MDgsNiBAQAogCQkxQUFBRERBNDE0REI0MDlGMDBBRjY0QjMgLyogU2Nyb2xs
aW5nVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFBQUREQTIxNERCNDA5RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQUFBRERFMzE0REM4QzhGMDBB
RjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBQURERTExNERDOEM4RjAwQUY2NEIzIC8qIFNjcm9sbGlu
Z1RyZWVOb2RlLmNwcCAqLzsgfTsKIAkJMUFBQURERTQxNERDOEM4RjAwQUY2NEIzIC8qIFNjcm9s
bGluZ1RyZWVOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQUFBRERFMjE0REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuaCAqLzsg
fTsKLQkJMUFBQURERTgxNERDOERGODAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlTWFjLm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBQURERTYx
NERDOERGODAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlTWFjLm1tICovOyB9OwotCQkxQUFB
RERFOTE0REM4REY4MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGVNYWMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQUFEREU3MTREQzhERjgwMEFG
NjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZU1hYy5oICovOyB9OwogCQkxQUIxQUU3QTBDMDUxRkRF
MDAxMzlGNEYgLyogem9vbUluQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUFCMUFFNzgwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21JbkN1
cnNvci5wbmcgKi87IH07CiAJCTFBQjFBRTdCMEMwNTFGREUwMDEzOUY0RiAvKiB6b29tT3V0Q3Vy
c29yLnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFCMUFFNzkwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21PdXRDdXJzb3IucG5nICovOyB9OwogCQkx
QUIzM0RBNTEyNTUxRTMyMDAyNDQ1N0EgLyogSU9LaXQuZnJhbWV3b3JrIGluIEZyYW1ld29ya3Mg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFCMzNEQTQxMjU1MUUzMjAwMjQ0
NTdBIC8qIElPS2l0LmZyYW1ld29yayAqLzsgfTsKQEAgLTMyODksNiArMzI4Nyw4IEBACiAJCTkz
OEU2NjYwMDlGMDlCODEwMDhBNDhFQyAvKiBKU0hUTUxDYW52YXNFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOEU2NjVGMDlGMDlCODEw
MDhBNDhFQyAvKiBKU0hUTUxDYW52YXNFbGVtZW50LmNwcCAqLzsgfTsKIAkJOTM4RTY2NjIwOUYw
OUI4NzAwOEE0OEVDIC8qIEpTSFRNTENhbnZhc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOEU2NjYxMDlGMDlCODcwMDhBNDhFQyAvKiBK
U0hUTUxDYW52YXNFbGVtZW50LmggKi87IH07CiAJCTkzOTFBOTkxMTYyNzQ2Q0IwMDI5NzMzMCAv
KiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTM5MUE5OTAxNjI3NDZDQjAwMjk3MzMwIC8qIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWFjLmggKi87IH07CisJCTkzOTFBOTlDMTYyOUQ3MDAwMDI5NzMzMCAvKiBTY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MzkxQTk5QTE2MjlENkZGMDAyOTczMzAgLyogU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGUuY3BwICovOyB9OworCQk5MzkxQTk5RDE2MjlENzAwMDAyOTczMzAgLyog
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTFBOTlCMTYyOUQ3MDAwMDI5NzMzMCAvKiBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZS5oICovOyB9OwogCQk5MzkyMjYyRDEwMzIxMDdCMDA2RTdENUQgLyog
SlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzkyMjYyQzEwMzIxMDdCMDA2RTdENUQgLyogSlNIVE1MQ2Fu
dmFzRWxlbWVudEN1c3RvbS5jcHAgKi87IH07CiAJCTkzOTIyNjJGMTAzMjEwODQwMDZFN0Q1RCAv
KiBKU0NTU1J1bGVMaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzOTIyNjJFMTAzMjEwODQwMDZFN0Q1RCAvKiBKU0NTU1J1bGVMaXN0
Q3VzdG9tLmNwcCAqLzsgfTsKIAkJOTM5MkYxNDIwQUQxODVGNDAwNjkxQkQ0IC8qIFJlbmRlckNv
dW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkz
OTJGMTQxMEFEMTg1RjQwMDY5MUJENCAvKiBSZW5kZXJDb3VudGVyLmggKi87IH07CkBAIC0zMzIz
LDYgKzMzMjMsOCBAQAogCQk5M0MwOUE4MTBCMDY0RjAwMDA1QUJENEQgLyogRXZlbnRIYW5kbGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQzA5
QTgwMEIwNjRGMDAwMDVBQkQ0RCAvKiBFdmVudEhhbmRsZXIuY3BwICovOyB9OwogCQk5M0MwOUM4
NjBCMDY1N0FBMDA1QUJENEQgLyogU2Nyb2xsVHlwZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzQzA5Qzg1MEIwNjU3QUEwMDVBQkQ0RCAvKiBTY3Jv
bGxUeXBlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTkzQzQ0MjAwMEY4MTNBRTEwMEMxQTYzNCAvKiBDb2xsZWN0aW9uVHlwZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNDNDQxRkYwRjgxM0FFMTAw
QzFBNjM0IC8qIENvbGxlY3Rpb25UeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJOTNDNEE0MTUxNjI5REY1QTAwQzNFQjZFIC8qIFNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5M0M0QTQxMzE2MjlERjVBMDBDM0VCNkUgLyogU2Nyb2xsaW5nVHJlZVNj
cm9sbGluZ05vZGVNYWMuaCAqLzsgfTsKKwkJOTNDNEE0MTYxNjI5REY1QTAwQzNFQjZFIC8qIFNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNDNEE0MTQxNjI5REY1QTAwQzNFQjZFIC8qIFNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tICovOyB9OwogCQk5M0M0RjZFQjExMDhGOUE1MDA5OUQw
REIgLyogQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gOTNDNEY2RTkxMTA4RjlBNTAwOTlEMERCIC8qIEFjY2Vzc2li
aWxpdHlTY3JvbGxiYXIuaCAqLzsgfTsKIAkJOTNDODQxRjgwOUNFODU1QzAwREZGNUU1IC8qIERP
TUltcGxlbWVudGF0aW9uRnJvbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDkzQzg0MUY3MDlDRTg1NUMwMERGRjVFNSAvKiBET01JbXBsZW1lbnRhdGlv
bkZyb250LmggKi87IH07CiAJCTkzQzg0MUZGMDlDRTg1ODMwMERGRjVFNSAvKiBET01JbXBsZW1l
bnRhdGlvbkZyb250LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkzQzg0MUZFMDlDRTg1ODMwMERGRjVFNSAvKiBET01JbXBsZW1lbnRhdGlvbkZyb250
LmNwcCAqLzsgfTsKQEAgLTc1OTAsOCArNzU5Miw2IEBACiAJCTFBQUFEREEyMTREQjQwOUYwMEFG
NjRCMyAvKiBTY3JvbGxpbmdUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNjcm9sbGluZ1RyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBQURERTEx
NERDOEM4RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGluZ1RyZWVOb2RlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUFBQURERTIxNERDOEM4RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1Ry
ZWVOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ1RyZWVO
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQUFEREU2MTREQzhERjgwMEFG
NjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFNjcm9sbGluZ1RyZWVOb2RlTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkxQUFBRERFNzE0REM4REY4MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5v
ZGVNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsaW5nVHJlZU5v
ZGVNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFCMUFFNzgwQzA1MUZERTAw
MTM5RjRGIC8qIHpvb21JbkN1cnNvci5wbmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBpbWFnZS5wbmc7IHBhdGggPSB6b29tSW5DdXJzb3IucG5nOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUIxQUU3OTBDMDUxRkRFMDAxMzlGNEYgLyog
em9vbU91dEN1cnNvci5wbmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBpbWFnZS5wbmc7IHBhdGggPSB6b29tT3V0Q3Vyc29yLnBuZzsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFCMzNEQTQxMjU1MUUzMjAwMjQ0NTdBIC8qIElPS2l0LmZy
YW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gSU9LaXQuZnJhbWV3b3JrOyBwYXRoID0gL1N5c3Rl
bS9MaWJyYXJ5L0ZyYW1ld29ya3MvSU9LaXQuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNv
bHV0ZT4iOyB9OwpAQCAtMTA0OTEsNiArMTA0OTEsOCBAQAogCQk5MzhFNjY1RjA5RjA5QjgxMDA4
QTQ4RUMgLyogSlNIVE1MQ2FudmFzRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0hUTUxDYW52YXNFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTM4RTY2NjEwOUYwOUI4NzAwOEE0OEVDIC8qIEpTSFRNTENhbnZhc0VsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MQ2FudmFzRWxlbWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5MzkxQTk5MDE2Mjc0NkNCMDAyOTcz
MzAgLyogU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTM5MUE5OUExNjI5RDZGRjAwMjk3MzMwIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGlu
Z1RyZWVTY3JvbGxpbmdOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTM5
MUE5OUIxNjI5RDcwMDAwMjk3MzMwIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzOTIyNjJDMTAzMjEwN0IwMDZFN0Q1
RCAvKiBKU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5MzkyMjYyRTEwMzIxMDg0MDA2RTdENUQgLyogSlNDU1NSdWxl
TGlzdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NT
U1J1bGVMaXN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM5MkYx
NDEwQUQxODVGNDAwNjkxQkQ0IC8qIFJlbmRlckNvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbmRlckNvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEwNTI3LDYgKzEwNTI5LDggQEAKIAkJOTNDMDlBODAwQjA2NEYwMDAwNUFCRDREIC8q
IEV2ZW50SGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBF
dmVudEhhbmRsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0MwOUM4NTBC
MDY1N0FBMDA1QUJENEQgLyogU2Nyb2xsVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2Nyb2xsVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTND
NDQxRkYwRjgxM0FFMTAwQzFBNjM0IC8qIENvbGxlY3Rpb25UeXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvbGxlY3Rpb25UeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTkzQzRBNDEzMTYyOURGNUEwMEMzRUI2RSAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5M0M0
QTQxNDE2MjlERjVBMDBDM0VCNkUgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNDNEY2RTkx
MTA4RjlBNTAwOTlEMERCIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk5M0M4NDFGNzA5Q0U4NTVDMDBERkY1RTUgLyogRE9NSW1wbGVt
ZW50YXRpb25Gcm9udC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01JbXBs
ZW1lbnRhdGlvbkZyb250Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzQzg0MUZF
MDlDRTg1ODMwMERGRjVFNSAvKiBET01JbXBsZW1lbnRhdGlvbkZyb250LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERPTUltcGxlbWVudGF0aW9uRnJvbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ2MDQsNiArMTQ2MDgsOCBAQAogCQkJCTFB
QUFEREEyMTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmggKi8sCiAJCQkJMUFBQURE
RTExNERDOEM4RjAwQUY2NEIzIC8qIFNjcm9sbGluZ1RyZWVOb2RlLmNwcCAqLywKIAkJCQkxQUFB
RERFMjE0REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuaCAqLywKKwkJCQk5Mzkx
QTk5QTE2MjlENkZGMDAyOTczMzAgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwICov
LAorCQkJCTkzOTFBOTlCMTYyOUQ3MDAwMDI5NzMzMCAvKiBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBzY3JvbGxpbmc7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtMTQ2MTYsOCArMTQ2MjIsOCBAQAogCQkJCTkzMUNCRDEyMTYxQTQ0Rjgw
MEU0Qzg3NCAvKiBTY3JvbGxpbmdTdGF0ZU5vZGVNYWMubW0gKi8sCiAJCQkJMUFGNjJGMjMxNERB
RkU5MTAwNDE1NTZDIC8qIFNjcm9sbGluZ1RocmVhZE1hYy5tbSAqLywKIAkJCQkxQTM1ODYyQTE1
MjUyMjU0MDAyMkE2NTkgLyogU2Nyb2xsaW5nVHJlZU1hYy5tbSAqLywKLQkJCQkxQUFBRERFNzE0
REM4REY4MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGVNYWMuaCAqLywKLQkJCQkxQUFBRERF
NjE0REM4REY4MDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGVNYWMubW0gKi8sCisJCQkJOTND
NEE0MTMxNjI5REY1QTAwQzNFQjZFIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLmgg
Ki8sCisJCQkJOTNDNEE0MTQxNjI5REY1QTAwQzNFQjZFIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlTWFjLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtMjQ5MTgsNyArMjQ5MjQsNiBAQAogCQkJCTFBRjYyRjI2MTREQUZFQTEw
MDQxNTU2QyAvKiBTY3JvbGxpbmdUaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQUFEREE0
MTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QUFBRERFNDE0REM4QzhGMDBBRjY0QjMgLyogU2Nyb2xsaW5nVHJlZU5vZGUuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTFBQUFEREU5MTREQzhERjgwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZU1h
Yy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNDMDlDODYwQjA2NTdBQTAwNUFCRDREIC8qIFNjcm9s
bFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzZENkUyNjA5QUY5NDM1MDBGNTk3NTkgLyog
U2Nyb2xsVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNERDIxMjUxRjEyRDAwM0VGMjY5
IC8qIFNlYXJjaElucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTU5OCw2ICsyNTYwMyw4
IEBACiAJCQkJNTE0QkM4NDMxNjFDRjA1QzAwNEQ1MkY0IC8qIFJlc291cmNlQnVmZmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1NzI4QkQ5RTE2MjUzNjk2MDBDNDBCNTYgLyogU2libGluZ1RyYXZl
cnNhbFN0cmF0ZWdpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTFBOTkxMTYyNzQ2Q0IwMDI5
NzMzMCAvKiBTY3JvbGxpbmdDb29yZGluYXRvck1hYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTM5
MUE5OUQxNjI5RDcwMDAwMjk3MzMwIC8qIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk5M0M0QTQxNTE2MjlERjVBMDBDM0VCNkUgLyogU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjgxNDYsNyArMjgxNTMsNiBA
QAogCQkJCTFBQUFEREEzMTREQjQwOUYwMEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTFBMzU4NjJDMTUyNTIyNTQwMDIyQTY1OSAvKiBTY3JvbGxpbmdUcmVl
TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFBQURERTMxNERDOEM4RjAwQUY2NEIzIC8qIFNj
cm9sbGluZ1RyZWVOb2RlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTFBQUFEREU4MTREQzhERjgw
MEFGNjRCMyAvKiBTY3JvbGxpbmdUcmVlTm9kZU1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJD
MjQ0MUM0MEU4QjY1RDAwMDU1MzIwRiAvKiBTY3JvbGxWaWV3LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTkzNTM2NzZCMDlBRUQ4OEIwMEQzNUNENiAvKiBTY3JvbGxWaWV3TWFjLm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRjU1QjNERDExMjUxRjEyRDAwM0VGMjY5IC8qIFNlYXJjaElucHV0VHlwZS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTI4NzAyLDYgKzI4NzA4LDggQEAKIAkJCQkzMTk1NUE4NjE2
MEQxOTkwMDA4NTgwMjUgLyogUmVuZGVyU25hcHNob3R0ZWRQbHVnSW4uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTE0QkM4M0YxNjFDRjA0QTAwNEQ1MkY0IC8qIFJlc291cmNlQnVmZmVyLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTE0QkM4NDIxNjFDRjA1QzAwNEQ1MkY0IC8qIFJlc291cmNlQnVm
ZmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkzOTFBOTlDMTYyOUQ3MDAwMDI5NzMzMCAvKiBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5M0M0QTQx
NjE2MjlERjVBMDBDM0VCNkUgLyogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0gaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGlu
Z1N0YXRlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1N0YXRlTm9kZS5oCShyZXZpc2lvbiAxMzEyNjIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NzQsOCArNzQsOSBAQCBwdWJsaWM6CiAgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBwYXJlbnQoKSBj
b25zdCB7IHJldHVybiBtX3BhcmVudDsgfQogICAgIHZvaWQgc2V0UGFyZW50KFNjcm9sbGluZ1N0
YXRlTm9kZSogcGFyZW50KSB7IG1fcGFyZW50ID0gcGFyZW50OyB9CiAKLSAgICB2b2lkIGFwcGVu
ZENoaWxkKFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPik7CisgICAgVmVjdG9yPE93blB0
cjxTY3JvbGxpbmdTdGF0ZU5vZGU+ID4qIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGls
ZHJlbi5nZXQoKTsgfQogCisgICAgdm9pZCBhcHBlbmRDaGlsZChQYXNzT3duUHRyPFNjcm9sbGlu
Z1N0YXRlTm9kZT4pOwogICAgIHZvaWQgcmVtb3ZlQ2hpbGQoU2Nyb2xsaW5nU3RhdGVOb2RlKik7
CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1RyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWUuY3BwCShyZXZpc2lvbiAxMzEyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiAr
MzMsNyBAQAogI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgogI2luY2x1ZGUgIlNjcm9s
bGluZ1RocmVhZC5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVOb2RlLmgiCisjaW5jbHVkZSAi
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgogI2luY2x1ZGUgPHd0Zi9UZW1wb3JhcnlDaGFuZ2UuaD4KIApAQCAtNDUsNyArNDYsNyBAQCBQ
YXNzUmVmUHRyPFNjcm9sbGluZ1RyZWU+IFNjcm9sbGluZ1RyZWU6CiAKIFNjcm9sbGluZ1RyZWU6
OlNjcm9sbGluZ1RyZWUoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
KQogICAgIDogbV9zY3JvbGxpbmdDb29yZGluYXRvcihzY3JvbGxpbmdDb29yZGluYXRvcikKLSAg
ICAsIG1fcm9vdE5vZGUoU2Nyb2xsaW5nVHJlZU5vZGU6OmNyZWF0ZSh0aGlzKSkKKyAgICAsIG1f
cm9vdE5vZGUoU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OmNyZWF0ZSh0aGlzKSkKICAgICAs
IG1faGFzV2hlZWxFdmVudEhhbmRsZXJzKGZhbHNlKQogICAgICwgbV9jYW5Hb0JhY2soZmFsc2Up
CiAgICAgLCBtX2NhbkdvRm9yd2FyZChmYWxzZSkKQEAgLTEzNywxMSArMTM4LDY4IEBAIHZvaWQg
U2Nyb2xsaW5nVHJlZTo6Y29tbWl0TmV3VHJlZVN0YXRlKFAKICAgICAKICAgICBUZW1wb3JhcnlD
aGFuZ2U8Ym9vbD4gY2hhbmdlSGFuZGxpbmdQcm9ncmFtbWF0aWNTY3JvbGwobV9pc0hhbmRsaW5n
UHJvZ3JhbW1hdGljU2Nyb2xsLCBzY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+
cmVxdWVzdGVkU2Nyb2xsUG9zaXRpb25SZXByZXNlbnRzUHJvZ3JhbW1hdGljU2Nyb2xsKCkpOwog
Ci0gICAgbV9yb290Tm9kZS0+dXBkYXRlKHNjcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9k
ZSgpKTsKKyAgICByZW1vdmVEZXN0cm95ZWROb2RlcyhzY3JvbGxpbmdTdGF0ZVRyZWUuZ2V0KCkp
OworICAgIHVwZGF0ZU5vZGVzRnJvbVN0YXRlTm9kZShzY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RT
dGF0ZU5vZGUoKSk7CiAKICAgICB1cGRhdGVEZWJ1Z1Jvb3RMYXllcigpOwogfQogCit2b2lkIFNj
cm9sbGluZ1RyZWU6OnVwZGF0ZU5vZGVzRnJvbVN0YXRlTm9kZShTY3JvbGxpbmdTdGF0ZU5vZGUq
IHN0YXRlTm9kZSkKK3sKKyAgICAvLyBUaGlzIGZ1Y3Rpb24gcmVjdXJzZXMgdGhyb3VnaCB0aGUg
U2Nyb2xsaW5nU3RhdGVUcmVlIGFuZCB1cGRhdGVzIHRoZSBjb3JyZXNwb25kaW5nIFNjcm9sbGlu
Z1RyZWVOb2Rlcy4KKyAgICAvLyBGaW5kIHRoZSBTY3JvbGxpbmdUcmVlTm9kZSBhc3NvY2lhdGVk
IHdpdGggdGhlIGN1cnJlbnQgc3RhdGVOb2RlIHVzaW5nIHRoZSBzaGFyZWQgSUQgYW5kIG91ciBI
YXNoTWFwLgorICAgIEhhc2hNYXA8U2Nyb2xsaW5nTm9kZUlELCBTY3JvbGxpbmdUcmVlTm9kZSo+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fbm9kZU1hcC5maW5kKHN0YXRlTm9kZS0+c2Nyb2xsaW5n
Tm9kZUlEKCkpOworCisgICAgaWYgKGl0ICE9IG1fbm9kZU1hcC5lbmQoKSkgeworICAgICAgICBT
Y3JvbGxpbmdUcmVlTm9kZSogbm9kZSA9IGl0LT52YWx1ZTsKKyAgICAgICAgbm9kZS0+dXBkYXRl
KHN0YXRlTm9kZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSWYgdGhlIG5vZGUgaXNuJ3Qg
Zm91bmQsIGl0J3MgZWl0aGVyIG5ldyBhbmQgbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIHRyZWUs
IG9yIHRoZXJlIGlzIGEgbmV3IElEIGZvciBvdXIKKyAgICAgICAgLy8gcm9vdCBub2RlLgorICAg
ICAgICBpZiAoIXN0YXRlTm9kZS0+cGFyZW50KCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMg
dGhlIHJvb3Qgbm9kZS4KKyAgICAgICAgICAgIG1fcm9vdE5vZGUtPnNldFNjcm9sbGluZ05vZGVJ
RChzdGF0ZU5vZGUtPnNjcm9sbGluZ05vZGVJRCgpKTsKKyAgICAgICAgICAgIG1fbm9kZU1hcC5z
ZXQoc3RhdGVOb2RlLT5zY3JvbGxpbmdOb2RlSUQoKSwgbV9yb290Tm9kZS5nZXQoKSk7CisgICAg
ICAgICAgICBtX3Jvb3ROb2RlLT51cGRhdGUoc3RhdGVOb2RlKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB3ZSB3aWxsIGhhdmUgbW9yZSB0
aGFuIGp1c3QgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUsIHNvIHdlJ2xsIGhhdmUgdG8KKyAg
ICAgICAgICAgIC8vIGZpZ3VyZSBvdXQgd2hpY2ggdHlwZSBvZiBub2RlIHRvIGNyZWF0ZS4KKyAg
ICAgICAgICAgIE93blB0cjxTY3JvbGxpbmdUcmVlTm9kZT4gbmV3Tm9kZSA9IFNjcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlOjpjcmVhdGUodGhpcyk7CisgICAgICAgICAgICBTY3JvbGxpbmdUcmVl
Tm9kZSogbmV3Tm9kZVJhd1B0ciA9IG5ld05vZGUuZ2V0KCk7CisgICAgICAgICAgICBtX25vZGVN
YXAuc2V0KHN0YXRlTm9kZS0+c2Nyb2xsaW5nTm9kZUlEKCksIG5ld05vZGVSYXdQdHIpOworICAg
ICAgICAgICAgSGFzaE1hcDxTY3JvbGxpbmdOb2RlSUQsIFNjcm9sbGluZ1RyZWVOb2RlKj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9ub2RlTWFwLmZpbmQoc3RhdGVOb2RlLT5wYXJlbnQoKS0+c2Ny
b2xsaW5nTm9kZUlEKCkpOworICAgICAgICAgICAgaWYgKGl0ICE9IG1fbm9kZU1hcC5lbmQoKSkg
eworICAgICAgICAgICAgICAgIFNjcm9sbGluZ1RyZWVOb2RlKiBwYXJlbnQgPSBpdC0+dmFsdWU7
CisgICAgICAgICAgICAgICAgbmV3Tm9kZS0+c2V0UGFyZW50KHBhcmVudCk7CisgICAgICAgICAg
ICAgICAgcGFyZW50LT5hcHBlbmRDaGlsZChuZXdOb2RlLnJlbGVhc2UoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBuZXdOb2RlUmF3UHRyLT51cGRhdGUoc3RhdGVOb2RlKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIE5vdyB1cGRhdGUgdGhlIGNoaWxkcmVuIGlmIHdlIGhhdmUg
YW55LgorICAgIFZlY3RvcjxPd25QdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPiA+KiBzdGF0ZU5vZGVD
aGlsZHJlbiA9IHN0YXRlTm9kZS0+Y2hpbGRyZW4oKTsKKyAgICBpZiAoIXN0YXRlTm9kZUNoaWxk
cmVuKQorICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3Qgc2l6ZSA9IHN0YXRlTm9kZUNoaWxk
cmVuLT5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAg
ICAgIHVwZGF0ZU5vZGVzRnJvbVN0YXRlTm9kZShzdGF0ZU5vZGVDaGlsZHJlbi0+YXQoaSkuZ2V0
KCkpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWU6OnJlbW92ZURlc3Ryb3llZE5vZGVzKFNjcm9s
bGluZ1N0YXRlVHJlZSogc3RhdGVUcmVlKQoreworICAgIGNvbnN0IFZlY3RvcjxTY3JvbGxpbmdO
b2RlSUQ+JiByZW1vdmVkTm9kZXMgPSBzdGF0ZVRyZWUtPnJlbW92ZWROb2RlcygpOworICAgIHNp
emVfdCBzaXplID0gcmVtb3ZlZE5vZGVzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNpemU7ICsraSkgeworICAgICAgICBTY3JvbGxpbmdUcmVlTm9kZSogbm9kZSA9IG1fbm9k
ZU1hcC50YWtlKHJlbW92ZWROb2Rlc1tpXSk7CisgICAgICAgIC8vIE5ldmVyIGRlc3Ryb3kgdGhl
IHJvb3Qgbm9kZS4gVGhlcmUgd2lsbCBiZSBhIG5ldyByb290IG5vZGUgaW4gdGhlIHN0YXRlIHRy
ZWUsIGFuZCB3ZSB3aWxsCisgICAgICAgIC8vIGFzc29jaWF0ZSBpdCB3aXRoIG91ciBleGlzdGlu
ZyByb290IG5vZGUgaW4gdXBkYXRlTm9kZXNGcm9tU3RhdGVOb2RlKCkuCisgICAgICAgIGlmIChu
b2RlICYmIG5vZGUtPnBhcmVudCgpKQorICAgICAgICAgICAgbV9yb290Tm9kZS0+cmVtb3ZlQ2hp
bGQobm9kZSk7CisgICAgfQorfQorCiB2b2lkIFNjcm9sbGluZ1RyZWU6OnNldE1haW5GcmFtZVBp
blN0YXRlKGJvb2wgcGlubmVkVG9UaGVMZWZ0LCBib29sIHBpbm5lZFRvVGhlUmlnaHQpCiB7CiAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3dpcGVTdGF0ZU11dGV4KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmgJKHJldmlzaW9uIDEzMTI2
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOSBAQAogCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2
ZW50LmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaCIKICNpbmNsdWRlIDx3dGYvRnVuY3Rpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTQ1LDggKzQ3LDggQEAgT0JKQ19DTEFT
UyBDQUxheWVyOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbnRQb2ludDsKLWNsYXNz
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOwogY2xhc3MgU2Nyb2xsaW5nVHJlZU5vZGU7CitjbGFzcyBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTsKIGNsYXNzIFNjcm9sbGluZ1N0YXRlVHJlZTsKIAog
Ly8gVGhlIFNjcm9sbGluZ1RyZWUgY2xhc3MgbGl2ZXMgYWxtb3N0IGV4Y2x1c2l2ZWx5IG9uIHRo
ZSBzY3JvbGxpbmcgdGhyZWFkIGFuZCBtYW5hZ2VzIHRoZQpAQCAtMTA1LDggKzEwNywxMiBAQCBw
cml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVEZWJ1Z1Jvb3RMYXllcigpOwogCisgICAgdm9pZCBy
ZW1vdmVEZXN0cm95ZWROb2RlcyhTY3JvbGxpbmdTdGF0ZVRyZWUqKTsKKyAgICB2b2lkIHVwZGF0
ZU5vZGVzRnJvbVN0YXRlTm9kZShTY3JvbGxpbmdTdGF0ZU5vZGUqKTsKKwogICAgIFJlZlB0cjxT
Y3JvbGxpbmdDb29yZGluYXRvcj4gbV9zY3JvbGxpbmdDb29yZGluYXRvcjsKLSAgICBPd25QdHI8
U2Nyb2xsaW5nVHJlZU5vZGU+IG1fcm9vdE5vZGU7CisgICAgT3duUHRyPFNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlPiBtX3Jvb3ROb2RlOworICAgIEhhc2hNYXA8U2Nyb2xsaW5nTm9kZUlELCBT
Y3JvbGxpbmdUcmVlTm9kZSo+IG1fbm9kZU1hcDsKIAogICAgIE11dGV4IG1fbXV0ZXg7CiAgICAg
UmVnaW9uIG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUuY3BwCShyZXZpc2lvbiAx
MzEyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlTm9k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEzICszNCw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogU2Nyb2xsaW5nVHJlZU5vZGU6OlNjcm9sbGluZ1RyZWVOb2RlKFNjcm9sbGluZ1RyZWUq
IHNjcm9sbGluZ1RyZWUpCiAgICAgOiBtX3Njcm9sbGluZ1RyZWUoc2Nyb2xsaW5nVHJlZSkKLSAg
ICAsIG1fc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgwKQotICAg
ICwgbV9ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSkKLSAg
ICAsIG1fdmVydGljYWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKQotICAg
ICwgbV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcihmYWxzZSkKLSAgICAsIG1faGFzRW5h
YmxlZFZlcnRpY2FsU2Nyb2xsYmFyKGZhbHNlKQotICAgICwgbV9ob3Jpem9udGFsU2Nyb2xsYmFy
TW9kZShTY3JvbGxiYXJBdXRvKQotICAgICwgbV92ZXJ0aWNhbFNjcm9sbGJhck1vZGUoU2Nyb2xs
YmFyQXV0bykKKyAgICAsIG1fbm9kZUlEKDApCisgICAgLCBtX3BhcmVudCgwKQogewogfQogCkBA
IC00OCwzNyArNDMsMjkgQEAgU2Nyb2xsaW5nVHJlZU5vZGU6On5TY3JvbGxpbmdUcmVlTm9kZSgp
CiB7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZU5vZGU6OnVwZGF0ZShTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGUqIHN0YXRlKQordm9pZCBTY3JvbGxpbmdUcmVlTm9kZTo6YXBwZW5kQ2hpbGQo
UGFzc093blB0cjxTY3JvbGxpbmdUcmVlTm9kZT4gY2hpbGROb2RlKQogewotICAgIGlmIChzdGF0
ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Vmll
d3BvcnRSZWN0KQotICAgICAgICBtX3ZpZXdwb3J0UmVjdCA9IHN0YXRlLT52aWV3cG9ydFJlY3Qo
KTsKKyAgICBjaGlsZE5vZGUtPnNldFBhcmVudCh0aGlzKTsKIAotICAgIGlmIChzdGF0ZS0+Y2hh
bmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Q29udGVudHNT
aXplKQotICAgICAgICBtX2NvbnRlbnRzU2l6ZSA9IHN0YXRlLT5jb250ZW50c1NpemUoKTsKKyAg
ICBpZiAoIW1fY2hpbGRyZW4pCisgICAgICAgIG1fY2hpbGRyZW4gPSBhZG9wdFB0cihuZXcgVmVj
dG9yPE93blB0cjxTY3JvbGxpbmdUcmVlTm9kZT4gPik7CiAKLSAgICBpZiAoc3RhdGUtPmNoYW5n
ZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNob3VsZFVwZGF0
ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpCi0gICAgICAgIG1fc2hvdWxkVXBkYXRl
U2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCA9IHN0YXRlLT5zaG91bGRVcGRhdGVTY3Jv
bGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKCk7Ci0KLSAgICBpZiAoc3RhdGUtPmNoYW5nZWRQ
cm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhvcml6b250YWxTY3Jv
bGxFbGFzdGljaXR5KQotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxFbGFzdGljaXR5ID0gc3Rh
dGUtPmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KCk7Ci0KLSAgICBpZiAoc3RhdGUtPmNoYW5n
ZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU2Ny
b2xsRWxhc3RpY2l0eSkKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkgPSBzdGF0
ZS0+dmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCk7Ci0KLSAgICBpZiAoc3RhdGUtPmNoYW5nZWRQ
cm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhhc0VuYWJsZWRIb3Jp
em9udGFsU2Nyb2xsYmFyKQotICAgICAgICBtX2hhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFy
ID0gc3RhdGUtPmhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKCk7Ci0KLSAgICBpZiAoc3Rh
dGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6Okhh
c0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgbV9oYXNFbmFibGVkVmVydGljYWxT
Y3JvbGxiYXIgPSBzdGF0ZS0+aGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci0KLSAgICBp
ZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGU6Okhvcml6b250YWxTY3JvbGxiYXJNb2RlKQotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxi
YXJNb2RlID0gc3RhdGUtPmhvcml6b250YWxTY3JvbGxiYXJNb2RlKCk7CisgICAgbV9jaGlsZHJl
bi0+YXBwZW5kKGNoaWxkTm9kZSk7Cit9CiAKLSAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0
aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlZlcnRpY2FsU2Nyb2xsYmFyTW9k
ZSkKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhck1vZGUgPSBzdGF0ZS0+dmVydGljYWxTY3Jv
bGxiYXJNb2RlKCk7Cit2b2lkIFNjcm9sbGluZ1RyZWVOb2RlOjpyZW1vdmVDaGlsZChTY3JvbGxp
bmdUcmVlTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW1fY2hpbGRyZW4pCisgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZTo6U2Nyb2xsT3JpZ2luKQotICAgICAgICBtX3Njcm9sbE9yaWdpbiA9IHN0
YXRlLT5zY3JvbGxPcmlnaW4oKTsKKyAgICBpZiAoc2l6ZV90IGluZGV4ID0gbV9jaGlsZHJlbi0+
ZmluZChub2RlKSkgeworICAgICAgICBtX2NoaWxkcmVuLT5yZW1vdmUoaW5kZXgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgc2l6ZV90IHNpemUgPSBtX2NoaWxkcmVuLT5zaXplKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fY2hpbGRy
ZW4tPmF0KGkpLT5yZW1vdmVDaGlsZChub2RlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU5vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdU
cmVlTm9kZS5oCShyZXZpc2lvbiAxMzEyNjIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdUcmVlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw1NiArMzUsMzIg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7Ci1j
bGFzcyBTY3JvbGxpbmdUcmVlOwotY2xhc3MgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOwot
CiBjbGFzcyBTY3JvbGxpbmdUcmVlTm9kZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25Q
dHI8U2Nyb2xsaW5nVHJlZU5vZGU+IGNyZWF0ZShTY3JvbGxpbmdUcmVlKik7Ci0gICAgdmlydHVh
bCB+U2Nyb2xsaW5nVHJlZU5vZGUoKTsKLQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZl
bnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRT
Y3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpID0gMDsKLQotICAgIE1haW5UaHJlYWRTY3Jv
bGxpbmdSZWFzb25zIHNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQo
KSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5U
aHJlYWQ7IH0KLQotcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IFNjcm9sbGluZ1RyZWVOb2RlKFNj
cm9sbGluZ1RyZWUqKTsKKyAgICB2aXJ0dWFsIH5TY3JvbGxpbmdUcmVlTm9kZSgpOwogCi0gICAg
U2Nyb2xsaW5nVHJlZSogc2Nyb2xsaW5nVHJlZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5n
VHJlZTsgfQotCi0gICAgY29uc3QgSW50UmVjdCYgdmlld3BvcnRSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV92aWV3cG9ydFJlY3Q7IH0KLSAgICBjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRlbnRzU2l6ZTsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUo
U2Nyb2xsaW5nU3RhdGVOb2RlKikgPSAwOwogCi0gICAgU2Nyb2xsRWxhc3RpY2l0eSBob3Jpem9u
dGFsU2Nyb2xsRWxhc3RpY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbEVs
YXN0aWNpdHk7IH0KLSAgICBTY3JvbGxFbGFzdGljaXR5IHZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxFbGFzdGljaXR5OyB9CisgICAgU2Ny
b2xsaW5nTm9kZUlEIHNjcm9sbGluZ05vZGVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZUlEOyB9
CisgICAgdm9pZCBzZXRTY3JvbGxpbmdOb2RlSUQoU2Nyb2xsaW5nTm9kZUlEIG5vZGVJRCkgeyBt
X25vZGVJRCA9IG5vZGVJRDsgfQogCi0gICAgYm9vbCBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9s
bGJhcigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXI7IH0K
LSAgICBib29sIGhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyOyB9CisgICAgU2Nyb2xsaW5nVHJlZU5vZGUqIHBh
cmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9CisgICAgdm9pZCBzZXRQYXJlbnQoU2Ny
b2xsaW5nVHJlZU5vZGUqIHBhcmVudCkgeyBtX3BhcmVudCA9IHBhcmVudDsgfQogCi0gICAgYm9v
bCBjYW5IYXZlU2Nyb2xsYmFycygpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJh
ck1vZGUgIT0gU2Nyb2xsYmFyQWx3YXlzT2ZmIHx8IG1fdmVydGljYWxTY3JvbGxiYXJNb2RlICE9
IFNjcm9sbGJhckFsd2F5c09mZjsgfQorICAgIHZvaWQgYXBwZW5kQ2hpbGQoUGFzc093blB0cjxT
Y3JvbGxpbmdUcmVlTm9kZT4pOworICAgIHZvaWQgcmVtb3ZlQ2hpbGQoU2Nyb2xsaW5nVHJlZU5v
ZGUqKTsKIAotICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxPcmlnaW4oKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbE9yaWdpbjsgfQorcHJvdGVjdGVkOgorICAgIFNjcm9sbGluZ1RyZWUqIHNjcm9s
bGluZ1RyZWUoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGluZ1RyZWU7IH0KIAogcHJpdmF0ZToK
ICAgICBTY3JvbGxpbmdUcmVlKiBtX3Njcm9sbGluZ1RyZWU7CiAKLSAgICBJbnRSZWN0IG1fdmll
d3BvcnRSZWN0OwotICAgIEludFNpemUgbV9jb250ZW50c1NpemU7Ci0gICAgSW50UG9pbnQgbV9z
Y3JvbGxPcmlnaW47Ci0KLSAgICBNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyBtX3Nob3VsZFVw
ZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQ7Ci0KLSAgICBTY3JvbGxFbGFzdGlj
aXR5IG1faG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHk7Ci0gICAgU2Nyb2xsRWxhc3RpY2l0eSBt
X3ZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eTsKLSAgICAKLSAgICBib29sIG1faGFzRW5hYmxlZEhv
cml6b250YWxTY3JvbGxiYXI7Ci0gICAgYm9vbCBtX2hhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJh
cjsKKyAgICBTY3JvbGxpbmdOb2RlSUQgbV9ub2RlSUQ7CiAKLSAgICBTY3JvbGxiYXJNb2RlIG1f
aG9yaXpvbnRhbFNjcm9sbGJhck1vZGU7Ci0gICAgU2Nyb2xsYmFyTW9kZSBtX3ZlcnRpY2FsU2Ny
b2xsYmFyTW9kZTsKKyAgICBTY3JvbGxpbmdUcmVlTm9kZSogbV9wYXJlbnQ7CisgICAgT3duUHRy
PFZlY3RvcjxPd25QdHI8U2Nyb2xsaW5nVHJlZU5vZGU+ID4gPiBtX2NoaWxkcmVuOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZS5oIgorCisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKworI2luY2x1ZGUgIlNj
cm9sbGluZ1N0YXRlVHJlZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Njcm9sbGluZ1Ry
ZWVTY3JvbGxpbmdOb2RlOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZShTY3JvbGxpbmdUcmVl
KiBzY3JvbGxpbmdUcmVlKQorICAgIDogU2Nyb2xsaW5nVHJlZU5vZGUoc2Nyb2xsaW5nVHJlZSkK
KyAgICAsIG1fc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgwKQor
ICAgICwgbV9ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShTY3JvbGxFbGFzdGljaXR5Tm9uZSkK
KyAgICAsIG1fdmVydGljYWxTY3JvbGxFbGFzdGljaXR5KFNjcm9sbEVsYXN0aWNpdHlOb25lKQor
ICAgICwgbV9oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcihmYWxzZSkKKyAgICAsIG1faGFz
RW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKGZhbHNlKQorICAgICwgbV9ob3Jpem9udGFsU2Nyb2xs
YmFyTW9kZShTY3JvbGxiYXJBdXRvKQorICAgICwgbV92ZXJ0aWNhbFNjcm9sbGJhck1vZGUoU2Ny
b2xsYmFyQXV0bykKK3sKK30KKworU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6On5TY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZSgpCit7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGU6OnVwZGF0ZShTY3JvbGxpbmdTdGF0ZU5vZGUqIHN0YXRlTm9kZSkKK3sKKyAgICBTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIHN0YXRlID0gdG9TY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUoc3RhdGVOb2RlKTsKKworICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAm
IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Vmlld3BvcnRSZWN0KQorICAgICAgICBtX3Zp
ZXdwb3J0UmVjdCA9IHN0YXRlLT52aWV3cG9ydFJlY3QoKTsKKworICAgIGlmIChzdGF0ZS0+Y2hh
bmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Q29udGVudHNT
aXplKQorICAgICAgICBtX2NvbnRlbnRzU2l6ZSA9IHN0YXRlLT5jb250ZW50c1NpemUoKTsKKwor
ICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZTo6U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCkKKyAg
ICAgICAgbV9zaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkID0gc3Rh
dGUtPnNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKTsKKworICAg
IGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZTo6SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkpCisgICAgICAgIG1faG9yaXpvbnRhbFNj
cm9sbEVsYXN0aWNpdHkgPSBzdGF0ZS0+aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKTsKKwor
ICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZTo6VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KQorICAgICAgICBtX3ZlcnRpY2FsU2Ny
b2xsRWxhc3RpY2l0eSA9IHN0YXRlLT52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoKTsKKworICAg
IGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZTo6SGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIG1faGFzRW5hYmxl
ZEhvcml6b250YWxTY3JvbGxiYXIgPSBzdGF0ZS0+aGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxi
YXIoKTsKKworICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6SGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICBt
X2hhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhciA9IHN0YXRlLT5oYXNFbmFibGVkVmVydGljYWxT
Y3JvbGxiYXIoKTsKKworICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6SG9yaXpvbnRhbFNjcm9sbGJhck1vZGUpCisgICAgICAg
IG1faG9yaXpvbnRhbFNjcm9sbGJhck1vZGUgPSBzdGF0ZS0+aG9yaXpvbnRhbFNjcm9sbGJhck1v
ZGUoKTsKKworICAgIGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTo6VmVydGljYWxTY3JvbGxiYXJNb2RlKQorICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyTW9kZSA9IHN0YXRlLT52ZXJ0aWNhbFNjcm9sbGJhck1vZGUoKTsKKworICAg
IGlmIChzdGF0ZS0+Y2hhbmdlZFByb3BlcnRpZXMoKSAmIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZTo6U2Nyb2xsT3JpZ2luKQorICAgICAgICBtX3Njcm9sbE9yaWdpbiA9IHN0YXRlLT5zY3Jv
bGxPcmlnaW4oKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFRIUkVBREVEX1NDUk9MTElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlX2gKKyNkZWZpbmUgU2Nyb2xsaW5nVHJl
ZVNjcm9sbGluZ05vZGVfaAorCisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKworI2lu
Y2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgorI2luY2x1ZGUgIlNj
cm9sbGluZ0Nvb3JkaW5hdG9yLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZU5vZGUuaCIKKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFBsYXRmb3JtV2hlZWxFdmVudDsKK2NsYXNzIFNjcm9sbGluZ1RyZWU7CitjbGFzcyBTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGU7CisKK2NsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2Rl
IDogcHVibGljIFNjcm9sbGluZ1RyZWVOb2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZT4gY3JlYXRlKFNjcm9sbGluZ1RyZWUqKTsK
KyAgICB2aXJ0dWFsIH5TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZSgpOworCisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZShTY3JvbGxpbmdTdGF0ZU5vZGUqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JikgPSAwOwor
CisgICAgTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMgc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQ
b3NpdGlvbk9uTWFpblRocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkVXBkYXRlU2Nyb2xs
TGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZDsgfQorCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQg
U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUoU2Nyb2xsaW5nVHJlZSopOworCisgICAgY29uc3Qg
SW50UmVjdCYgdmlld3BvcnRSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFJlY3Q7IH0K
KyAgICBjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
bnRzU2l6ZTsgfQorCisgICAgU2Nyb2xsRWxhc3RpY2l0eSBob3Jpem9udGFsU2Nyb2xsRWxhc3Rp
Y2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHk7IH0KKyAg
ICBTY3JvbGxFbGFzdGljaXR5IHZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmVydGljYWxTY3JvbGxFbGFzdGljaXR5OyB9CisKKyAgICBib29sIGhhc0VuYWJsZWRI
b3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9oYXNFbmFibGVkSG9yaXpvbnRh
bFNjcm9sbGJhcjsgfQorICAgIGJvb2wgaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXI7IH0KKworICAgIGJvb2wg
Y2FuSGF2ZVNjcm9sbGJhcnMoKSBjb25zdCB7IHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXJN
b2RlICE9IFNjcm9sbGJhckFsd2F5c09mZiB8fCBtX3ZlcnRpY2FsU2Nyb2xsYmFyTW9kZSAhPSBT
Y3JvbGxiYXJBbHdheXNPZmY7IH0KKworICAgIGNvbnN0IEludFBvaW50JiBzY3JvbGxPcmlnaW4o
KSBjb25zdCB7IHJldHVybiBtX3Njcm9sbE9yaWdpbjsgfQorCitwcml2YXRlOgorICAgIEludFJl
Y3QgbV92aWV3cG9ydFJlY3Q7CisgICAgSW50U2l6ZSBtX2NvbnRlbnRzU2l6ZTsKKyAgICBJbnRQ
b2ludCBtX3Njcm9sbE9yaWdpbjsKKworICAgIE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zIG1f
c2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZDsKKworICAgIFNjcm9s
bEVsYXN0aWNpdHkgbV9ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eTsKKyAgICBTY3JvbGxFbGFz
dGljaXR5IG1fdmVydGljYWxTY3JvbGxFbGFzdGljaXR5OworICAgIAorICAgIGJvb2wgbV9oYXNF
bmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICBib29sIG1faGFzRW5hYmxlZFZlcnRpY2Fs
U2Nyb2xsYmFyOworCisgICAgU2Nyb2xsYmFyTW9kZSBtX2hvcml6b250YWxTY3JvbGxiYXJNb2Rl
OworICAgIFNjcm9sbGJhck1vZGUgbV92ZXJ0aWNhbFNjcm9sbGJhck1vZGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5H
KQorCisjZW5kaWYgLy8gU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVfaApJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdD
b29yZGluYXRvck1hYy5tbQkocmV2aXNpb24gMTMxMjYyKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yNjIsNyArMjYyLDcgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvck1hYzo6ZGV0YWNo
RnJvbQogCiAgICAgLy8gU2Nyb2xsaW5nU3RhdGVUcmVlOjpyZW1vdmVOb2RlKCkgd2lsbCBkZXN0
cm95IGNoaWxkcmVuLCBzbyB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSByZW1vdmUgdGhvc2UgY2hp
bGRyZW4KICAgICAvLyBmcm9tIHRoZSBIYXNoTWFwLgotICAgY29uc3QgVmVjdG9yPFNjcm9sbGlu
Z05vZGVJRD4mIHJlbW92ZWROb2RlcyA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVkTm9k
ZXMoKTsKKyAgICBjb25zdCBWZWN0b3I8U2Nyb2xsaW5nTm9kZUlEPiYgcmVtb3ZlZE5vZGVzID0g
bV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJlbW92ZWROb2RlcygpOwogICAgIHNpemVfdCBzaXplID0g
cmVtb3ZlZE5vZGVzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsr
aSkKICAgICAgICAgbV9zdGF0ZU5vZGVNYXAucmVtb3ZlKHJlbW92ZWROb2Rlc1tpXSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5n
VHJlZU1hYy5tbQkocmV2aXNpb24gMTMxMjYyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDcgQEAKICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQogCiAjaW1wb3J0ICJBdXRvZHJh
aW5lZFBvb2wuaCIKLSNpbXBvcnQgIlNjcm9sbGluZ1RyZWVOb2RlTWFjLmgiCisjaW1wb3J0ICJT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9DQVRl
eHRMYXllci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU5vZGVNYWMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU5vZGVNYWMuaAko
cmV2aXNpb24gMTMxMjYyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Nj
cm9sbGluZ1RyZWVOb2RlTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgU2Nyb2xsaW5nVHJlZU5vZGVNYWNfaAotI2RlZmluZSBTY3JvbGxp
bmdUcmVlTm9kZU1hY19oCi0KLSNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQotCi0jaW5j
bHVkZSAiU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdU
cmVlTm9kZS5oIgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotT0JKQ19DTEFTUyBDQUxh
eWVyOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNjcm9sbGluZ1RyZWVOb2RlTWFj
IDogcHVibGljIFNjcm9sbGluZ1RyZWVOb2RlLCBwcml2YXRlIFNjcm9sbEVsYXN0aWNpdHlDb250
cm9sbGVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBTY3JvbGxpbmdUcmVlTm9kZU1h
YyhTY3JvbGxpbmdUcmVlKik7Ci0gICAgdmlydHVhbCB+U2Nyb2xsaW5nVHJlZU5vZGVNYWMoKTsK
LQotcHJpdmF0ZToKLSAgICAvLyBTY3JvbGxpbmdUcmVlTm9kZSBtZW1iZXIgZnVuY3Rpb25zLgot
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKikgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JikgT1ZFUlJJREU7Ci0KLSAgICAvLyBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxl
ciBtZW1iZXIgZnVuY3Rpb25zLgotICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NIb3Jpem9udGFsU3Ry
ZXRjaGluZygpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBhbGxvd3NWZXJ0aWNhbFN0cmV0
Y2hpbmcoKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIEludFNpemUgc3RyZXRjaEFtb3VudCgpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBwaW5uZWRJbkRpcmVjdGlvbihjb25zdCBGbG9hdFNp
emUmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuU2Nyb2xsSG9yaXpvbnRhbGx5KCkg
T1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGNhblNjcm9sbFZlcnRpY2FsbHkoKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUnViYmVyQmFuZEluRGlyZWN0aW9uKFNjcm9sbERp
cmVjdGlvbikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBJbnRQb2ludCBhYnNvbHV0ZVNjcm9sbFBv
c2l0aW9uKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIGltbWVkaWF0ZVNjcm9sbEJ5KGNv
bnN0IEZsb2F0U2l6ZSYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVTY3Jv
bGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEZsb2F0U2l6ZSYpIE9WRVJS
SURFOwotICAgIHZpcnR1YWwgdm9pZCBzdGFydFNuYXBSdWJiZXJiYW5kVGltZXIoKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKSBPVkVSUklERTsK
LQotICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTY3Jv
bGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYpOwotICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25X
aXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBJbnRQb2ludCYpOwotCi0gICAgdm9p
ZCBzZXRTY3JvbGxMYXllclBvc2l0aW9uKGNvbnN0IEludFBvaW50Jik7Ci0KLSAgICBJbnRQb2lu
dCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdDsKLSAgICBJbnRQb2ludCBtYXhpbXVtU2Ny
b2xsUG9zaXRpb24oKSBjb25zdDsKLQotICAgIHZvaWQgc2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYp
OwotICAgIHZvaWQgc2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBJ
bnRTaXplJik7Ci0KLSAgICB2b2lkIHVwZGF0ZU1haW5GcmFtZVBpblN0YXRlKGNvbnN0IEludFBv
aW50JiBzY3JvbGxQb3NpdGlvbik7Ci0KLSAgICB2b2lkIGxvZ0V4cG9zZWRVbmZpbGxlZEFyZWEo
KTsKLQotICAgIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyIG1fc2Nyb2xsRWxhc3RpY2l0eUNv
bnRyb2xsZXI7Ci0gICAgUmV0YWluUHRyPENGUnVuTG9vcFRpbWVyUmVmPiBtX3NuYXBSdWJiZXJi
YW5kVGltZXI7Ci0KLSAgICBSZXRhaW5QdHI8Q0FMYXllcj4gbV9zY3JvbGxMYXllcjsKLSAgICBJ
bnRQb2ludCBtX3Byb2JhYmxlTWFpblRocmVhZFNjcm9sbFBvc2l0aW9uOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykK
LQotI2VuZGlmIC8vIFNjcm9sbGluZ1RyZWVOb2RlTWFjX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlTm9kZU1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZU5vZGVNYWMu
bW0JKHJldmlzaW9uIDEzMTI2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21h
Yy9TY3JvbGxpbmdUcmVlTm9kZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSwzNzEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdU
cmVlTm9kZU1hYy5oIgotCi0jaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLQotI2luY2x1
ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9y
LmgiCi0jaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZS5oIgotI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRl
VHJlZS5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiVGlsZUNhY2hlLmgiCi0j
aW5jbHVkZSAiV2ViVGlsZUxheWVyLmgiCi0KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4K
LSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0YXRpYyB2b2lkIGxvZ1RocmVhZGVkU2Nyb2xsaW5nTW9kZSh1bnNpZ25lZCBtYWluVGhy
ZWFkU2Nyb2xsaW5nUmVhc29ucyk7Ci0KLVBhc3NPd25QdHI8U2Nyb2xsaW5nVHJlZU5vZGU+IFNj
cm9sbGluZ1RyZWVOb2RlOjpjcmVhdGUoU2Nyb2xsaW5nVHJlZSogc2Nyb2xsaW5nVHJlZSkKLXsK
LSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbGluZ1RyZWVOb2RlTWFjKHNjcm9sbGluZ1Ry
ZWUpKTsKLX0KLQotU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OlNjcm9sbGluZ1RyZWVOb2RlTWFjKFNj
cm9sbGluZ1RyZWUqIHNjcm9sbGluZ1RyZWUpCi0gICAgOiBTY3JvbGxpbmdUcmVlTm9kZShzY3Jv
bGxpbmdUcmVlKQotICAgICwgbV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcih0aGlzKQotewot
fQotCi1TY3JvbGxpbmdUcmVlTm9kZU1hYzo6flNjcm9sbGluZ1RyZWVOb2RlTWFjKCkKLXsKLSAg
ICBpZiAobV9zbmFwUnViYmVyYmFuZFRpbWVyKQotICAgICAgICBDRlJ1bkxvb3BUaW1lckludmFs
aWRhdGUobV9zbmFwUnViYmVyYmFuZFRpbWVyLmdldCgpKTsKLX0KLQotdm9pZCBTY3JvbGxpbmdU
cmVlTm9kZU1hYzo6dXBkYXRlKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGUpCi17
Ci0gICAgU2Nyb2xsaW5nVHJlZU5vZGU6OnVwZGF0ZShzdGF0ZSk7Ci0KLSAgICBpZiAoc3RhdGUt
PnNjcm9sbExheWVyRGlkQ2hhbmdlKCkpCi0gICAgICAgIG1fc2Nyb2xsTGF5ZXIgPSBzdGF0ZS0+
cGxhdGZvcm1TY3JvbGxMYXllcigpOwotCi0gICAgaWYgKHN0YXRlLT5jaGFuZ2VkUHJvcGVydGll
cygpICYgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlv
bikKLSAgICAgICAgc2V0U2Nyb2xsUG9zaXRpb24oc3RhdGUtPnJlcXVlc3RlZFNjcm9sbFBvc2l0
aW9uKCkpOwotCi0gICAgaWYgKHN0YXRlLT5zY3JvbGxMYXllckRpZENoYW5nZSgpIHx8IHN0YXRl
LT5jaGFuZ2VkUHJvcGVydGllcygpICYgKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Q29u
dGVudHNTaXplIHwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpWaWV3cG9ydFJlY3QpKQot
ICAgICAgICB1cGRhdGVNYWluRnJhbWVQaW5TdGF0ZShzY3JvbGxQb3NpdGlvbigpKTsKLQotICAg
IGlmICgoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6OlNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpKSB7Ci0g
ICAgICAgIHVuc2lnbmVkIG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zID0gdGhpcy0+c2hvdWxk
VXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpOwotCi0gICAgICAgIGlmICht
YWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucykgewotICAgICAgICAgICAgLy8gV2UncmUgdHJhbnNp
dGlvbmluZyB0byB0aGUgc2xvdyAidXBkYXRlIHNjcm9sbCBsYXllciBwb3NpdGlvbiBvbiB0aGUg
bWFpbiB0aHJlYWQiIG1vZGUuCi0gICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBwcm9iYWJs
ZSBtYWluIHRocmVhZCBzY3JvbGwgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCBzY3JvbGwgbGF5
ZXIgcG9zaXRpb24uCi0gICAgICAgICAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkg
JiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKQot
ICAgICAgICAgICAgICAgIG1fcHJvYmFibGVNYWluVGhyZWFkU2Nyb2xsUG9zaXRpb24gPSBzdGF0
ZS0+cmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgICAgIENHUG9pbnQgc2Nyb2xsTGF5ZXJQb3NpdGlvbiA9IG1fc2Nyb2xsTGF5ZXIuZ2V0
KCkucG9zaXRpb247Ci0gICAgICAgICAgICAgICAgbV9wcm9iYWJsZU1haW5UaHJlYWRTY3JvbGxQ
b3NpdGlvbiA9IEludFBvaW50KC1zY3JvbGxMYXllclBvc2l0aW9uLngsIC1zY3JvbGxMYXllclBv
c2l0aW9uLnkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNjcm9s
bGluZ1RyZWUoKS0+c2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpKQotICAgICAg
ICAgICAgbG9nVGhyZWFkZWRTY3JvbGxpbmdNb2RlKG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25z
KTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OmhhbmRsZVdoZWVsRXZl
bnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQotewotICAgIGlmICghY2Fu
SGF2ZVNjcm9sbGJhcnMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zY3JvbGxFbGFzdGlj
aXR5Q29udHJvbGxlci5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwotICAgIHNjcm9sbGlu
Z1RyZWUoKS0+aGFuZGxlV2hlZWxFdmVudFBoYXNlKHdoZWVsRXZlbnQucGhhc2UoKSk7Ci19Ci0K
LWJvb2wgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKCkK
LXsKLSAgICBzd2l0Y2ggKGhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKLSAgICBjYXNl
IFNjcm9sbEVsYXN0aWNpdHlBdXRvbWF0aWM6Ci0gICAgICAgIHJldHVybiBoYXNFbmFibGVkSG9y
aXpvbnRhbFNjcm9sbGJhcigpIHx8ICFoYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoKTsKLSAg
ICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlOb25lOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Y2FzZSBTY3JvbGxFbGFzdGljaXR5QWxsb3dlZDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKQotewot
ICAgIHN3aXRjaCAodmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKLSAgICBjYXNlIFNjcm9s
bEVsYXN0aWNpdHlBdXRvbWF0aWM6Ci0gICAgICAgIHJldHVybiBoYXNFbmFibGVkVmVydGljYWxT
Y3JvbGxiYXIoKSB8fCAhaGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoKTsKLSAgICBjYXNl
IFNjcm9sbEVsYXN0aWNpdHlOb25lOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBT
Y3JvbGxFbGFzdGljaXR5QWxsb3dlZDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1JbnRTaXpl
IFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpzdHJldGNoQW1vdW50KCkKLXsKLSAgICBJbnRTaXplIHN0
cmV0Y2g7Ci0KLSAgICBpZiAoc2Nyb2xsUG9zaXRpb24oKS55KCkgPCBtaW5pbXVtU2Nyb2xsUG9z
aXRpb24oKS55KCkpCi0gICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbFBvc2l0aW9uKCku
eSgpIC0gbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueSgpKTsKLSAgICBlbHNlIGlmIChzY3JvbGxQ
b3NpdGlvbigpLnkoKSA+IG1heGltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSkKLSAgICAgICAgc3Ry
ZXRjaC5zZXRIZWlnaHQoc2Nyb2xsUG9zaXRpb24oKS55KCkgLSBtYXhpbXVtU2Nyb2xsUG9zaXRp
b24oKS55KCkpOwotCi0gICAgaWYgKHNjcm9sbFBvc2l0aW9uKCkueCgpIDwgbWluaW11bVNjcm9s
bFBvc2l0aW9uKCkueCgpKQotICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbFBvc2l0aW9u
KCkueCgpIC0gbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueCgpKTsKLSAgICBlbHNlIGlmIChzY3Jv
bGxQb3NpdGlvbigpLngoKSA+IG1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKSkKLSAgICAgICAg
c3RyZXRjaC5zZXRXaWR0aChzY3JvbGxQb3NpdGlvbigpLngoKSAtIG1heGltdW1TY3JvbGxQb3Np
dGlvbigpLngoKSk7Ci0KLSAgICByZXR1cm4gc3RyZXRjaDsKLX0KLQotYm9vbCBTY3JvbGxpbmdU
cmVlTm9kZU1hYzo6cGlubmVkSW5EaXJlY3Rpb24oY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKLXsK
LSAgICBGbG9hdFNpemUgbGltaXREZWx0YTsKLQotICAgIGlmIChmYWJzZihkZWx0YS5oZWlnaHQo
KSkgPj0gZmFic2YoZGVsdGEud2lkdGgoKSkpIHsKLSAgICAgICAgaWYgKGRlbHRhLmhlaWdodCgp
IDwgMCkgewotICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgdXAuICBNYWtl
IHN1cmUgd2UgYXJlIG5vdCBwaW5uZWQgdG8gdGhlIHRvcAotICAgICAgICAgICAgbGltaXREZWx0
YS5zZXRIZWlnaHQoc2Nyb2xsUG9zaXRpb24oKS55KCkgLSBtaW5pbXVtU2Nyb2xsUG9zaXRpb24o
KS55KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0
byBzY3JvbGwgZG93bi4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgYm90dG9t
Ci0gICAgICAgICAgICBsaW1pdERlbHRhLnNldEhlaWdodChtYXhpbXVtU2Nyb2xsUG9zaXRpb24o
KS55KCkgLSBzY3JvbGxQb3NpdGlvbigpLnkoKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYg
KGRlbHRhLndpZHRoKCkpIHsKLSAgICAgICAgaWYgKGRlbHRhLndpZHRoKCkgPCAwKSB7Ci0gICAg
ICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCBsZWZ0LiAgTWFrZSBzdXJlIHdlIGFy
ZSBub3QgcGlubmVkIHRvIHRoZSBsZWZ0Ci0gICAgICAgICAgICBsaW1pdERlbHRhLnNldEhlaWdo
dChzY3JvbGxQb3NpdGlvbigpLngoKSAtIG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLngoKSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCBy
aWdodC4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgcmlnaHQKLSAgICAgICAg
ICAgIGxpbWl0RGVsdGEuc2V0SGVpZ2h0KG1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKSAtIHNj
cm9sbFBvc2l0aW9uKCkueCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgoZGVsdGEu
d2lkdGgoKSB8fCBkZWx0YS5oZWlnaHQoKSkgJiYgKGxpbWl0RGVsdGEud2lkdGgoKSA8IDEgJiYg
bGltaXREZWx0YS5oZWlnaHQoKSA8IDEpKSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpjYW5T
Y3JvbGxIb3Jpem9udGFsbHkoKQotewotICAgIHJldHVybiBoYXNFbmFibGVkSG9yaXpvbnRhbFNj
cm9sbGJhcigpOwotfQotCi1ib29sIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpjYW5TY3JvbGxWZXJ0
aWNhbGx5KCkKLXsKLSAgICByZXR1cm4gaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKCk7Ci19
Ci0KLWJvb2wgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OnNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlv
bihTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uKQotewotICAgIGlmIChkaXJlY3Rpb24gPT0gU2Ny
b2xsTGVmdCkKLSAgICAgICAgcmV0dXJuICFzY3JvbGxpbmdUcmVlKCktPmNhbkdvQmFjaygpOwot
ICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsUmlnaHQpCi0gICAgICAgIHJldHVybiAhc2Nyb2xs
aW5nVHJlZSgpLT5jYW5Hb0ZvcndhcmQoKTsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotSW50UG9pbnQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OmFi
c29sdXRlU2Nyb2xsUG9zaXRpb24oKQotewotICAgIHJldHVybiBzY3JvbGxQb3NpdGlvbigpOwot
fQotCi12b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjppbW1lZGlhdGVTY3JvbGxCeShjb25zdCBG
bG9hdFNpemUmIG9mZnNldCkKLXsKLSAgICBzY3JvbGxCeShyb3VuZGVkSW50U2l6ZShvZmZzZXQp
KTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6aW1tZWRpYXRlU2Nyb2xsQnlXaXRo
b3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKLXsKLSAg
ICBzY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKHJvdW5kZWRJbnRTaXplKG9m
ZnNldCkpOwotfQotCi12b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpzdGFydFNuYXBSdWJiZXJi
YW5kVGltZXIoKQotewotICAgIEFTU0VSVCghbV9zbmFwUnViYmVyYmFuZFRpbWVyKTsKLQotICAg
IENGVGltZUludGVydmFsIHRpbWVySW50ZXJ2YWwgPSAxLjAgLyA2MC4wOwotCi0gICAgbV9zbmFw
UnViYmVyYmFuZFRpbWVyID0gYWRvcHRDRihDRlJ1bkxvb3BUaW1lckNyZWF0ZVdpdGhIYW5kbGVy
KGtDRkFsbG9jYXRvckRlZmF1bHQsIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgdGltZXJJ
bnRlcnZhbCwgdGltZXJJbnRlcnZhbCwgMCwgMCwgXihDRlJ1bkxvb3BUaW1lclJlZikgewotICAg
ICAgICBtX3Njcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLnNuYXBSdWJiZXJCYW5kVGltZXJGaXJl
ZCgpOwotICAgIH0pKTsKLSAgICBDRlJ1bkxvb3BBZGRUaW1lcihDRlJ1bkxvb3BHZXRDdXJyZW50
KCksIG1fc25hcFJ1YmJlcmJhbmRUaW1lci5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsK
LX0KLQotdm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6c3RvcFNuYXBSdWJiZXJiYW5kVGltZXIo
KQotewotICAgIGlmICghbV9zbmFwUnViYmVyYmFuZFRpbWVyKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUobV9zbmFwUnViYmVyYmFuZFRpbWVyLmdldCgp
KTsKLSAgICBtX3NuYXBSdWJiZXJiYW5kVGltZXIgPSBudWxscHRyOwotfQotCi1JbnRQb2ludCBT
Y3JvbGxpbmdUcmVlTm9kZU1hYzo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAotewotICAgIGlmIChz
aG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKCkpCi0gICAgICAgIHJl
dHVybiBtX3Byb2JhYmxlTWFpblRocmVhZFNjcm9sbFBvc2l0aW9uOwotCi0gICAgQ0dQb2ludCBz
Y3JvbGxMYXllclBvc2l0aW9uID0gbV9zY3JvbGxMYXllci5nZXQoKS5wb3NpdGlvbjsKLSAgICBy
ZXR1cm4gSW50UG9pbnQoLXNjcm9sbExheWVyUG9zaXRpb24ueCArIHNjcm9sbE9yaWdpbigpLngo
KSwgLXNjcm9sbExheWVyUG9zaXRpb24ueSArIHNjcm9sbE9yaWdpbigpLnkoKSk7Ci19Ci0KLXZv
aWQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50
JiBzY3JvbGxQb3NpdGlvbikKLXsKLSAgICBJbnRQb2ludCBuZXdTY3JvbGxQb3NpdGlvbiA9IHNj
cm9sbFBvc2l0aW9uOwotICAgIG5ld1Njcm9sbFBvc2l0aW9uID0gbmV3U2Nyb2xsUG9zaXRpb24u
c2hydW5rVG8obWF4aW11bVNjcm9sbFBvc2l0aW9uKCkpOwotICAgIG5ld1Njcm9sbFBvc2l0aW9u
ID0gbmV3U2Nyb2xsUG9zaXRpb24uZXhwYW5kZWRUbyhtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSk7
Ci0KLSAgICBzZXRTY3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKG5l
d1Njcm9sbFBvc2l0aW9uKTsKLQotICAgIGlmIChzY3JvbGxpbmdUcmVlKCktPnNjcm9sbGluZ1Bl
cmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoKSkKLSAgICAgICAgbG9nRXhwb3NlZFVuZmlsbGVkQXJl
YSgpOwotfQotCi12b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpzZXRTY3JvbGxQb3NpdGlvbldp
dGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlv
bikKLXsKLSAgICB1cGRhdGVNYWluRnJhbWVQaW5TdGF0ZShzY3JvbGxQb3NpdGlvbik7Ci0KLSAg
ICBpZiAoc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpKSB7Ci0g
ICAgICAgIG1fcHJvYmFibGVNYWluVGhyZWFkU2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlv
bjsKLSAgICAgICAgc2Nyb2xsaW5nVHJlZSgpLT51cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlv
bkFuZFNjcm9sbExheWVyUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgc2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7Ci0g
ICAgc2Nyb2xsaW5nVHJlZSgpLT51cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbihzY3JvbGxQ
b3NpdGlvbik7Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OnNldFNjcm9sbExheWVy
UG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQotewotICAgIEFTU0VSVCghc2hvdWxk
VXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpKTsKLSAgICBtX3Njcm9sbExh
eWVyLmdldCgpLnBvc2l0aW9uID0gQ0dQb2ludE1ha2UoLXBvc2l0aW9uLngoKSArIHNjcm9sbE9y
aWdpbigpLngoKSwgLXBvc2l0aW9uLnkoKSArIHNjcm9sbE9yaWdpbigpLnkoKSk7Ci19Ci0KLUlu
dFBvaW50IFNjcm9sbGluZ1RyZWVOb2RlTWFjOjptaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25z
dAotewotICAgIHJldHVybiBJbnRQb2ludCgwLCAwKTsKLX0KLQotSW50UG9pbnQgU2Nyb2xsaW5n
VHJlZU5vZGVNYWM6Om1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgSW50UG9p
bnQgcG9zaXRpb24oY29udGVudHNTaXplKCkud2lkdGgoKSAtIHZpZXdwb3J0UmVjdCgpLndpZHRo
KCksCi0gICAgICAgICAgICAgICAgICAgICAgY29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSB2aWV3
cG9ydFJlY3QoKS5oZWlnaHQoKSk7Ci0KLSAgICBwb3NpdGlvbi5jbGFtcE5lZ2F0aXZlVG9aZXJv
KCk7Ci0KLSAgICByZXR1cm4gcG9zaXRpb247Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nVHJlZU5vZGVN
YWM6OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIG9mZnNldCkKLXsKLSAgICBzZXRTY3JvbGxQb3Np
dGlvbihzY3JvbGxQb3NpdGlvbigpICsgb2Zmc2V0KTsKLX0KLQotdm9pZCBTY3JvbGxpbmdUcmVl
Tm9kZU1hYzo6c2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBJbnRT
aXplJiBvZmZzZXQpCi17Ci0gICAgc2V0U2Nyb2xsUG9zaXRpb25XaXRob3V0Q29udGVudEVkZ2VD
b25zdHJhaW50cyhzY3JvbGxQb3NpdGlvbigpICsgb2Zmc2V0KTsKLX0KLQotdm9pZCBTY3JvbGxp
bmdUcmVlTm9kZU1hYzo6dXBkYXRlTWFpbkZyYW1lUGluU3RhdGUoY29uc3QgSW50UG9pbnQmIHNj
cm9sbFBvc2l0aW9uKQotewotICAgIGJvb2wgcGlubmVkVG9UaGVMZWZ0ID0gc2Nyb2xsUG9zaXRp
b24ueCgpIDw9IG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLngoKTsKLSAgICBib29sIHBpbm5lZFRv
VGhlUmlnaHQgPSBzY3JvbGxQb3NpdGlvbi54KCkgPj0gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCku
eCgpOwotCi0gICAgc2Nyb2xsaW5nVHJlZSgpLT5zZXRNYWluRnJhbWVQaW5TdGF0ZShwaW5uZWRU
b1RoZUxlZnQsIHBpbm5lZFRvVGhlUmlnaHQpOwotfQotCi12b2lkIFNjcm9sbGluZ1RyZWVOb2Rl
TWFjOjpsb2dFeHBvc2VkVW5maWxsZWRBcmVhKCkKLXsKLSAgICBSZWdpb24gcGFpbnRlZFZpc2li
bGVUaWxlczsKLQotICAgIERlcXVlPENBTGF5ZXIqPiBsYXllclF1ZXVlOwotICAgIGxheWVyUXVl
dWUuYXBwZW5kKG1fc2Nyb2xsTGF5ZXIuZ2V0KCkpOwotICAgIFdlYlRpbGVMYXllckxpc3QgdGls
ZXM7Ci0KLSAgICB3aGlsZSghbGF5ZXJRdWV1ZS5pc0VtcHR5KCkgJiYgdGlsZXMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIENBTGF5ZXIqIGxheWVyID0gbGF5ZXJRdWV1ZS50YWtlRmlyc3QoKTsKLSAg
ICAgICAgTlNBcnJheSogc3VibGF5ZXJzID0gW1tsYXllciBzdWJsYXllcnNdIGNvcHldOwotCi0g
ICAgICAgIC8vIElmIHRoaXMgbGF5ZXIgaXMgdGhlIHBhcmVudCBvZiBhIHRpbGUsIGl0IGlzIHRo
ZSBwYXJlbnQgb2YgYWxsIG9mIHRoZSB0aWxlcyBhbmQgbm90aGluZyBlbHNlLgotICAgICAgICBp
ZiAoW1tzdWJsYXllcnMgb2JqZWN0QXRJbmRleDowXSBpc0tpbmRPZkNsYXNzOltXZWJUaWxlTGF5
ZXIgY2xhc3NdXSkgewotICAgICAgICAgICAgZm9yIChDQUxheWVyKiBzdWJsYXllciBpbiBzdWJs
YXllcnMpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoW3N1YmxheWVyIGlzS2luZE9mQ2xhc3M6
W1dlYlRpbGVMYXllciBjbGFzc11dKTsKLSAgICAgICAgICAgICAgICB0aWxlcy5hcHBlbmQoc3Rh
dGljX2Nhc3Q8V2ViVGlsZUxheWVyKj4oc3VibGF5ZXIpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoQ0FMYXllciogc3VibGF5ZXIgaW4gc3VibGF5
ZXJzKQotICAgICAgICAgICAgICAgIGxheWVyUXVldWUuYXBwZW5kKHN1YmxheWVyKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFtzdWJsYXllcnMgcmVsZWFzZV07Ci0gICAgfQotCi0gICAgSW50UG9p
bnQgc2Nyb2xsUG9zaXRpb24gPSB0aGlzLT5zY3JvbGxQb3NpdGlvbigpOwotICAgIHVuc2lnbmVk
IHVuZmlsbGVkQXJlYSA9IFRpbGVDYWNoZTo6YmxhbmtQaXhlbENvdW50Rm9yVGlsZXModGlsZXMs
IHZpZXdwb3J0UmVjdCgpLCBJbnRQb2ludCgtc2Nyb2xsUG9zaXRpb24ueCgpLCAtc2Nyb2xsUG9z
aXRpb24ueSgpKSk7Ci0KLSAgICBpZiAodW5maWxsZWRBcmVhKQotICAgICAgICBXVEZMb2dBbHdh
eXMoIlNDUk9MTElORzogRXhwb3NlZCB0aWxlbGVzcyBhcmVhLiBUaW1lOiAlZiBVbmZpbGxlZCBQ
aXhlbHM6ICV1XG4iLCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLCB1bmZpbGxl
ZEFyZWEpOwotfQotCi1zdGF0aWMgdm9pZCBsb2dUaHJlYWRlZFNjcm9sbGluZ01vZGUodW5zaWdu
ZWQgbWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMpCi17Ci0gICAgaWYgKG1haW5UaHJlYWRTY3Jv
bGxpbmdSZWFzb25zKSB7Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgcmVhc29uc0Rlc2NyaXB0aW9u
OwotCi0gICAgICAgIGlmIChtYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyAmIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpGb3JjZWRPbk1haW5UaHJlYWQpCi0gICAgICAgICAgICByZWFzb25zRGVzY3Jp
cHRpb24uYXBwZW5kKCJmb3JjZWQsIik7Ci0gICAgICAgIGlmIChtYWluVGhyZWFkU2Nyb2xsaW5n
UmVhc29ucyAmIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpIYXNTbG93UmVwYWludE9iamVjdHMpCi0g
ICAgICAgICAgICByZWFzb25zRGVzY3JpcHRpb24uYXBwZW5kKCJzbG93LXJlcGFpbnQgb2JqZWN0
cywiKTsKLSAgICAgICAgaWYgKG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zICYgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6Okhhc1ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzV2l0aG91dFN1cHBvcnRp
bmdGaXhlZExheWVycykKLSAgICAgICAgICAgIHJlYXNvbnNEZXNjcmlwdGlvbi5hcHBlbmQoInZp
ZXdwb3J0LWNvbnN0cmFpbmVkIG9iamVjdHMsIik7Ci0gICAgICAgIGlmIChtYWluVGhyZWFkU2Ny
b2xsaW5nUmVhc29ucyAmIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpIYXNOb25MYXllckZpeGVkT2Jq
ZWN0cykKLSAgICAgICAgICAgIHJlYXNvbnNEZXNjcmlwdGlvbi5hcHBlbmQoIm5vbi1sYXllciB2
aWV3cG9ydC1jb25zdHJhaW5lZCBvYmplY3RzLCIpOwotICAgICAgICBpZiAobWFpblRocmVhZFNj
cm9sbGluZ1JlYXNvbnMgJiBTY3JvbGxpbmdDb29yZGluYXRvcjo6SXNJbWFnZURvY3VtZW50KQot
ICAgICAgICAgICAgcmVhc29uc0Rlc2NyaXB0aW9uLmFwcGVuZCgiaW1hZ2UgZG9jdW1lbnQsIik7
Ci0KLSAgICAgICAgLy8gU3RyaXAgdGhlIHRyYWlsaW5nIGNvbW1hLgotICAgICAgICBTdHJpbmcg
cmVhc29uc0Rlc2NyaXB0aW9uVHJpbW1lZCA9IHJlYXNvbnNEZXNjcmlwdGlvbi50b1N0cmluZygp
LmxlZnQocmVhc29uc0Rlc2NyaXB0aW9uLmxlbmd0aCgpIC0gMSk7Ci0KLSAgICAgICAgV1RGTG9n
QWx3YXlzKCJTQ1JPTExJTkc6IFN3aXRjaGluZyB0byBtYWluLXRocmVhZCBzY3JvbGxpbmcgbW9k
ZS4gVGltZTogJWYgUmVhc29uKHMpOiAlc1xuIiwgV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2lu
Z1RpbWUoKSwgcmVhc29uc0Rlc2NyaXB0aW9uVHJpbW1lZC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIFdURkxvZ0Fsd2F5cygiU0NST0xMSU5HOiBTd2l0Y2hpbmcgdG8gdGhy
ZWFkZWQgc2Nyb2xsaW5nIG1vZGUuIFRpbWU6ICVmXG4iLCBXVEY6Om1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5n
Tm9kZU1hYy5oCShyZXZpc2lvbiAxMzExMzYpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlTm9kZU1hYy5oOjEzMTEzNikKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcm9s
bGluZ1RyZWVOb2RlTWFjX2gKKyNkZWZpbmUgU2Nyb2xsaW5nVHJlZU5vZGVNYWNfaAorCisjaWYg
RU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKworI2luY2x1ZGUgIlNjcm9sbEVsYXN0aWNpdHlD
b250cm9sbGVyLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nVHJlZU5vZGUuaCIKKyNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CisKK09CSkNfQ0xBU1MgQ0FMYXllcjsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBTY3JvbGxpbmdUcmVlTm9kZU1hYyA6IHB1YmxpYyBTY3JvbGxpbmdUcmVl
Tm9kZSwgcHJpdmF0ZSBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlckNsaWVudCB7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgU2Nyb2xsaW5nVHJlZU5vZGVNYWMoU2Nyb2xsaW5nVHJlZSopOworICAg
IHZpcnR1YWwgflNjcm9sbGluZ1RyZWVOb2RlTWFjKCk7CisKK3ByaXZhdGU6CisgICAgLy8gU2Ny
b2xsaW5nVHJlZU5vZGUgbWVtYmVyIGZ1bmN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpIE9WRVJSSURFOwor
CisgICAgLy8gU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIgbWVtYmVyIGZ1bmN0aW9ucy4KKyAg
ICB2aXJ0dWFsIGJvb2wgYWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKSBPVkVSUklERTsKKyAg
ICB2aXJ0dWFsIGJvb2wgYWxsb3dzVmVydGljYWxTdHJldGNoaW5nKCkgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBJbnRTaXplIHN0cmV0Y2hBbW91bnQoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJv
b2wgcGlubmVkSW5EaXJlY3Rpb24oY29uc3QgRmxvYXRTaXplJikgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBib29sIGNhblNjcm9sbEhvcml6b250YWxseSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
Ym9vbCBjYW5TY3JvbGxWZXJ0aWNhbGx5KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIHNo
b3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxEaXJlY3Rpb24pIE9WRVJSSURFOworICAg
IHZpcnR1YWwgSW50UG9pbnQgYWJzb2x1dGVTY3JvbGxQb3NpdGlvbigpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBpbW1lZGlhdGVTY3JvbGxCeShjb25zdCBGbG9hdFNpemUmKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgaW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VD
b25zdHJhaW50cyhjb25zdCBGbG9hdFNpemUmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
c3RhcnRTbmFwUnViYmVyYmFuZFRpbWVyKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN0
b3BTbmFwUnViYmVyYmFuZFRpbWVyKCkgT1ZFUlJJREU7CisKKyAgICBJbnRQb2ludCBzY3JvbGxQ
b3NpdGlvbigpIGNvbnN0OworICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9p
bnQmKTsKKyAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uV2l0aG91dENvbnRlbnRFZGdlQ29uc3Ry
YWludHMoY29uc3QgSW50UG9pbnQmKTsKKworICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXJQb3NpdGlv
bihjb25zdCBJbnRQb2ludCYpOworCisgICAgSW50UG9pbnQgbWluaW11bVNjcm9sbFBvc2l0aW9u
KCkgY29uc3Q7CisgICAgSW50UG9pbnQgbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Q7CisK
KyAgICB2b2lkIHNjcm9sbEJ5KGNvbnN0IEludFNpemUmKTsKKyAgICB2b2lkIHNjcm9sbEJ5V2l0
aG91dENvbnRlbnRFZGdlQ29uc3RyYWludHMoY29uc3QgSW50U2l6ZSYpOworCisgICAgdm9pZCB1
cGRhdGVNYWluRnJhbWVQaW5TdGF0ZShjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOwor
CisgICAgdm9pZCBsb2dFeHBvc2VkVW5maWxsZWRBcmVhKCk7CisKKyAgICBTY3JvbGxFbGFzdGlj
aXR5Q29udHJvbGxlciBtX3Njcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyOworICAgIFJldGFpblB0
cjxDRlJ1bkxvb3BUaW1lclJlZj4gbV9zbmFwUnViYmVyYmFuZFRpbWVyOworCisgICAgUmV0YWlu
UHRyPENBTGF5ZXI+IG1fc2Nyb2xsTGF5ZXI7CisgICAgSW50UG9pbnQgbV9wcm9iYWJsZU1haW5U
aHJlYWRTY3JvbGxQb3NpdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisKKyNlbmRpZiAvLyBTY3JvbGxpbmdU
cmVlTm9kZU1hY19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Ny
b2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMuaAkocmV2
aXNpb24gMTMxMTM2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDI3ICsyMywy
NyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYg
U2Nyb2xsaW5nVHJlZU5vZGVNYWNfaAotI2RlZmluZSBTY3JvbGxpbmdUcmVlTm9kZU1hY19oCisj
aWZuZGVmIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjX2gKKyNkZWZpbmUgU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVNYWNfaAogCiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykK
IAogI2luY2x1ZGUgIlNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2Ny
b2xsaW5nVHJlZU5vZGUuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5o
IgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogT0JKQ19DTEFTUyBDQUxheWVyOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNjcm9sbGluZ1RyZWVOb2RlTWFjIDogcHVibGlj
IFNjcm9sbGluZ1RyZWVOb2RlLCBwcml2YXRlIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyQ2xp
ZW50IHsKK2NsYXNzIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjIDogcHVibGljIFNjcm9s
bGluZ1RyZWVTY3JvbGxpbmdOb2RlLCBwcml2YXRlIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVy
Q2xpZW50IHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTY3JvbGxpbmdUcmVlTm9kZU1hYyhTY3Jv
bGxpbmdUcmVlKik7Ci0gICAgdmlydHVhbCB+U2Nyb2xsaW5nVHJlZU5vZGVNYWMoKTsKKyAgICBl
eHBsaWNpdCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYyhTY3JvbGxpbmdUcmVlKik7Cisg
ICAgdmlydHVhbCB+U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMoKTsKIAogcHJpdmF0ZToK
ICAgICAvLyBTY3JvbGxpbmdUcmVlTm9kZSBtZW1iZXIgZnVuY3Rpb25zLgotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZShTY3JvbGxpbmdTdGF0ZU5vZGUqKSBPVkVSUklERTsKICAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKSBP
VkVSUklERTsKIAogICAgIC8vIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyIG1lbWJlciBmdW5j
dGlvbnMuCkBAIC04Nyw0ICs4Nyw0IEBAIHByaXZhdGU6CiAKICNlbmRpZiAvLyBFTkFCTEUoVEhS
RUFERURfU0NST0xMSU5HKQogCi0jZW5kaWYgLy8gU2Nyb2xsaW5nVHJlZU5vZGVNYWNfaAorI2Vu
ZGlmIC8vIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5n
VHJlZVNjcm9sbGluZ05vZGVNYWMubW0JKHJldmlzaW9uIDEzMTEzNikJKGZyb20gU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVOb2RlTWFjLm1tOjEzMTEzNikK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xs
aW5nTm9kZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdUcmVlTm9kZU1hYy5o
IgorCisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKworI2luY2x1ZGUgIlBsYXRmb3Jt
V2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCisjaW5jbHVk
ZSAiU2Nyb2xsaW5nVHJlZS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1N0YXRlVHJlZS5oIgorI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiVGlsZUNhY2hlLmgiCisjaW5jbHVkZSAiV2Vi
VGlsZUxheWVyLmgiCisKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3
dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2
b2lkIGxvZ1RocmVhZGVkU2Nyb2xsaW5nTW9kZSh1bnNpZ25lZCBtYWluVGhyZWFkU2Nyb2xsaW5n
UmVhc29ucyk7CisKK1Bhc3NPd25QdHI8U2Nyb2xsaW5nVHJlZU5vZGU+IFNjcm9sbGluZ1RyZWVO
b2RlOjpjcmVhdGUoU2Nyb2xsaW5nVHJlZSogc2Nyb2xsaW5nVHJlZSkKK3sKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFNjcm9sbGluZ1RyZWVOb2RlTWFjKHNjcm9sbGluZ1RyZWUpKTsKK30KKwor
U2Nyb2xsaW5nVHJlZU5vZGVNYWM6OlNjcm9sbGluZ1RyZWVOb2RlTWFjKFNjcm9sbGluZ1RyZWUq
IHNjcm9sbGluZ1RyZWUpCisgICAgOiBTY3JvbGxpbmdUcmVlTm9kZShzY3JvbGxpbmdUcmVlKQor
ICAgICwgbV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcih0aGlzKQoreworfQorCitTY3JvbGxp
bmdUcmVlTm9kZU1hYzo6flNjcm9sbGluZ1RyZWVOb2RlTWFjKCkKK3sKKyAgICBpZiAobV9zbmFw
UnViYmVyYmFuZFRpbWVyKQorICAgICAgICBDRlJ1bkxvb3BUaW1lckludmFsaWRhdGUobV9zbmFw
UnViYmVyYmFuZFRpbWVyLmdldCgpKTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6
dXBkYXRlKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGUpCit7CisgICAgU2Nyb2xs
aW5nVHJlZU5vZGU6OnVwZGF0ZShzdGF0ZSk7CisKKyAgICBpZiAoc3RhdGUtPnNjcm9sbExheWVy
RGlkQ2hhbmdlKCkpCisgICAgICAgIG1fc2Nyb2xsTGF5ZXIgPSBzdGF0ZS0+cGxhdGZvcm1TY3Jv
bGxMYXllcigpOworCisgICAgaWYgKHN0YXRlLT5jaGFuZ2VkUHJvcGVydGllcygpICYgU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbikKKyAgICAgICAg
c2V0U2Nyb2xsUG9zaXRpb24oc3RhdGUtPnJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKCkpOworCisg
ICAgaWYgKHN0YXRlLT5zY3JvbGxMYXllckRpZENoYW5nZSgpIHx8IHN0YXRlLT5jaGFuZ2VkUHJv
cGVydGllcygpICYgKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Q29udGVudHNTaXplIHwg
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpWaWV3cG9ydFJlY3QpKQorICAgICAgICB1cGRh
dGVNYWluRnJhbWVQaW5TdGF0ZShzY3JvbGxQb3NpdGlvbigpKTsKKworICAgIGlmICgoc3RhdGUt
PmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OlNob3Vs
ZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpKSB7CisgICAgICAgIHVuc2ln
bmVkIG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zID0gdGhpcy0+c2hvdWxkVXBkYXRlU2Nyb2xs
TGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpOworCisgICAgICAgIGlmIChtYWluVGhyZWFkU2Ny
b2xsaW5nUmVhc29ucykgeworICAgICAgICAgICAgLy8gV2UncmUgdHJhbnNpdGlvbmluZyB0byB0
aGUgc2xvdyAidXBkYXRlIHNjcm9sbCBsYXllciBwb3NpdGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQi
IG1vZGUuCisgICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBwcm9iYWJsZSBtYWluIHRocmVh
ZCBzY3JvbGwgcG9zaXRpb24gd2l0aCB0aGUgY3VycmVudCBzY3JvbGwgbGF5ZXIgcG9zaXRpb24u
CisgICAgICAgICAgICBpZiAoc3RhdGUtPmNoYW5nZWRQcm9wZXJ0aWVzKCkgJiBTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGU6OlJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKQorICAgICAgICAgICAg
ICAgIG1fcHJvYmFibGVNYWluVGhyZWFkU2Nyb2xsUG9zaXRpb24gPSBzdGF0ZS0+cmVxdWVzdGVk
U2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIENH
UG9pbnQgc2Nyb2xsTGF5ZXJQb3NpdGlvbiA9IG1fc2Nyb2xsTGF5ZXIuZ2V0KCkucG9zaXRpb247
CisgICAgICAgICAgICAgICAgbV9wcm9iYWJsZU1haW5UaHJlYWRTY3JvbGxQb3NpdGlvbiA9IElu
dFBvaW50KC1zY3JvbGxMYXllclBvc2l0aW9uLngsIC1zY3JvbGxMYXllclBvc2l0aW9uLnkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHNjcm9sbGluZ1RyZWUoKS0+
c2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgbG9nVGhy
ZWFkZWRTY3JvbGxpbmdNb2RlKG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKTsKKyAgICB9Cit9
CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50KQoreworICAgIGlmICghY2FuSGF2ZVNjcm9sbGJh
cnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zY3JvbGxFbGFzdGljaXR5Q29udHJvbGxl
ci5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOworICAgIHNjcm9sbGluZ1RyZWUoKS0+aGFu
ZGxlV2hlZWxFdmVudFBoYXNlKHdoZWVsRXZlbnQucGhhc2UoKSk7Cit9CisKK2Jvb2wgU2Nyb2xs
aW5nVHJlZU5vZGVNYWM6OmFsbG93c0hvcml6b250YWxTdHJldGNoaW5nKCkKK3sKKyAgICBzd2l0
Y2ggKGhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKKyAgICBjYXNlIFNjcm9sbEVsYXN0
aWNpdHlBdXRvbWF0aWM6CisgICAgICAgIHJldHVybiBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9s
bGJhcigpIHx8ICFoYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICBjYXNlIFNjcm9s
bEVsYXN0aWNpdHlOb25lOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBTY3JvbGxF
bGFzdGljaXR5QWxsb3dlZDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNjcm9sbGlu
Z1RyZWVOb2RlTWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKQoreworICAgIHN3aXRjaCAo
dmVydGljYWxTY3JvbGxFbGFzdGljaXR5KCkpIHsKKyAgICBjYXNlIFNjcm9sbEVsYXN0aWNpdHlB
dXRvbWF0aWM6CisgICAgICAgIHJldHVybiBoYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoKSB8
fCAhaGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICBjYXNlIFNjcm9sbEVsYXN0
aWNpdHlOb25lOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBTY3JvbGxFbGFzdGlj
aXR5QWxsb3dlZDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitJbnRTaXplIFNjcm9sbGluZ1Ry
ZWVOb2RlTWFjOjpzdHJldGNoQW1vdW50KCkKK3sKKyAgICBJbnRTaXplIHN0cmV0Y2g7CisKKyAg
ICBpZiAoc2Nyb2xsUG9zaXRpb24oKS55KCkgPCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkp
CisgICAgICAgIHN0cmV0Y2guc2V0SGVpZ2h0KHNjcm9sbFBvc2l0aW9uKCkueSgpIC0gbWluaW11
bVNjcm9sbFBvc2l0aW9uKCkueSgpKTsKKyAgICBlbHNlIGlmIChzY3JvbGxQb3NpdGlvbigpLnko
KSA+IG1heGltdW1TY3JvbGxQb3NpdGlvbigpLnkoKSkKKyAgICAgICAgc3RyZXRjaC5zZXRIZWln
aHQoc2Nyb2xsUG9zaXRpb24oKS55KCkgLSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpOwor
CisgICAgaWYgKHNjcm9sbFBvc2l0aW9uKCkueCgpIDwgbWluaW11bVNjcm9sbFBvc2l0aW9uKCku
eCgpKQorICAgICAgICBzdHJldGNoLnNldFdpZHRoKHNjcm9sbFBvc2l0aW9uKCkueCgpIC0gbWlu
aW11bVNjcm9sbFBvc2l0aW9uKCkueCgpKTsKKyAgICBlbHNlIGlmIChzY3JvbGxQb3NpdGlvbigp
LngoKSA+IG1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKSkKKyAgICAgICAgc3RyZXRjaC5zZXRX
aWR0aChzY3JvbGxQb3NpdGlvbigpLngoKSAtIG1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKSk7
CisKKyAgICByZXR1cm4gc3RyZXRjaDsKK30KKworYm9vbCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6
cGlubmVkSW5EaXJlY3Rpb24oY29uc3QgRmxvYXRTaXplJiBkZWx0YSkKK3sKKyAgICBGbG9hdFNp
emUgbGltaXREZWx0YTsKKworICAgIGlmIChmYWJzZihkZWx0YS5oZWlnaHQoKSkgPj0gZmFic2Yo
ZGVsdGEud2lkdGgoKSkpIHsKKyAgICAgICAgaWYgKGRlbHRhLmhlaWdodCgpIDwgMCkgeworICAg
ICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgdXAuICBNYWtlIHN1cmUgd2UgYXJl
IG5vdCBwaW5uZWQgdG8gdGhlIHRvcAorICAgICAgICAgICAgbGltaXREZWx0YS5zZXRIZWlnaHQo
c2Nyb2xsUG9zaXRpb24oKS55KCkgLSBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2UgYXJlIHRyeWluZyB0byBzY3JvbGwgZG93
bi4gIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgYm90dG9tCisgICAgICAgICAg
ICBsaW1pdERlbHRhLnNldEhlaWdodChtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS55KCkgLSBzY3Jv
bGxQb3NpdGlvbigpLnkoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGRlbHRhLndpZHRo
KCkpIHsKKyAgICAgICAgaWYgKGRlbHRhLndpZHRoKCkgPCAwKSB7CisgICAgICAgICAgICAvLyBX
ZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCBsZWZ0LiAgTWFrZSBzdXJlIHdlIGFyZSBub3QgcGlubmVk
IHRvIHRoZSBsZWZ0CisgICAgICAgICAgICBsaW1pdERlbHRhLnNldEhlaWdodChzY3JvbGxQb3Np
dGlvbigpLngoKSAtIG1pbmltdW1TY3JvbGxQb3NpdGlvbigpLngoKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBXZSBhcmUgdHJ5aW5nIHRvIHNjcm9sbCByaWdodC4gIE1ha2Ug
c3VyZSB3ZSBhcmUgbm90IHBpbm5lZCB0byB0aGUgcmlnaHQKKyAgICAgICAgICAgIGxpbWl0RGVs
dGEuc2V0SGVpZ2h0KG1heGltdW1TY3JvbGxQb3NpdGlvbigpLngoKSAtIHNjcm9sbFBvc2l0aW9u
KCkueCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgoZGVsdGEud2lkdGgoKSB8fCBk
ZWx0YS5oZWlnaHQoKSkgJiYgKGxpbWl0RGVsdGEud2lkdGgoKSA8IDEgJiYgbGltaXREZWx0YS5o
ZWlnaHQoKSA8IDEpKSAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpjYW5TY3JvbGxIb3Jpem9u
dGFsbHkoKQoreworICAgIHJldHVybiBoYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcigpOwor
fQorCitib29sIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpjYW5TY3JvbGxWZXJ0aWNhbGx5KCkKK3sK
KyAgICByZXR1cm4gaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKCk7Cit9CisKK2Jvb2wgU2Ny
b2xsaW5nVHJlZU5vZGVNYWM6OnNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxEaXJl
Y3Rpb24gZGlyZWN0aW9uKQoreworICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCkKKyAg
ICAgICAgcmV0dXJuICFzY3JvbGxpbmdUcmVlKCktPmNhbkdvQmFjaygpOworICAgIGlmIChkaXJl
Y3Rpb24gPT0gU2Nyb2xsUmlnaHQpCisgICAgICAgIHJldHVybiAhc2Nyb2xsaW5nVHJlZSgpLT5j
YW5Hb0ZvcndhcmQoKTsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKworSW50UG9pbnQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OmFic29sdXRlU2Nyb2xs
UG9zaXRpb24oKQoreworICAgIHJldHVybiBzY3JvbGxQb3NpdGlvbigpOworfQorCit2b2lkIFNj
cm9sbGluZ1RyZWVOb2RlTWFjOjppbW1lZGlhdGVTY3JvbGxCeShjb25zdCBGbG9hdFNpemUmIG9m
ZnNldCkKK3sKKyAgICBzY3JvbGxCeShyb3VuZGVkSW50U2l6ZShvZmZzZXQpKTsKK30KKwordm9p
ZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6aW1tZWRpYXRlU2Nyb2xsQnlXaXRob3V0Q29udGVudEVk
Z2VDb25zdHJhaW50cyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKK3sKKyAgICBzY3JvbGxCeVdp
dGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKHJvdW5kZWRJbnRTaXplKG9mZnNldCkpOworfQor
Cit2b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpzdGFydFNuYXBSdWJiZXJiYW5kVGltZXIoKQor
eworICAgIEFTU0VSVCghbV9zbmFwUnViYmVyYmFuZFRpbWVyKTsKKworICAgIENGVGltZUludGVy
dmFsIHRpbWVySW50ZXJ2YWwgPSAxLjAgLyA2MC4wOworCisgICAgbV9zbmFwUnViYmVyYmFuZFRp
bWVyID0gYWRvcHRDRihDRlJ1bkxvb3BUaW1lckNyZWF0ZVdpdGhIYW5kbGVyKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpICsgdGltZXJJbnRlcnZhbCwgdGlt
ZXJJbnRlcnZhbCwgMCwgMCwgXihDRlJ1bkxvb3BUaW1lclJlZikgeworICAgICAgICBtX3Njcm9s
bEVsYXN0aWNpdHlDb250cm9sbGVyLnNuYXBSdWJiZXJCYW5kVGltZXJGaXJlZCgpOworICAgIH0p
KTsKKyAgICBDRlJ1bkxvb3BBZGRUaW1lcihDRlJ1bkxvb3BHZXRDdXJyZW50KCksIG1fc25hcFJ1
YmJlcmJhbmRUaW1lci5nZXQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKK30KKwordm9pZCBT
Y3JvbGxpbmdUcmVlTm9kZU1hYzo6c3RvcFNuYXBSdWJiZXJiYW5kVGltZXIoKQoreworICAgIGlm
ICghbV9zbmFwUnViYmVyYmFuZFRpbWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBDRlJ1bkxv
b3BUaW1lckludmFsaWRhdGUobV9zbmFwUnViYmVyYmFuZFRpbWVyLmdldCgpKTsKKyAgICBtX3Nu
YXBSdWJiZXJiYW5kVGltZXIgPSBudWxscHRyOworfQorCitJbnRQb2ludCBTY3JvbGxpbmdUcmVl
Tm9kZU1hYzo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIGlmIChzaG91bGRVcGRhdGVT
Y3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKCkpCisgICAgICAgIHJldHVybiBtX3Byb2Jh
YmxlTWFpblRocmVhZFNjcm9sbFBvc2l0aW9uOworCisgICAgQ0dQb2ludCBzY3JvbGxMYXllclBv
c2l0aW9uID0gbV9zY3JvbGxMYXllci5nZXQoKS5wb3NpdGlvbjsKKyAgICByZXR1cm4gSW50UG9p
bnQoLXNjcm9sbExheWVyUG9zaXRpb24ueCArIHNjcm9sbE9yaWdpbigpLngoKSwgLXNjcm9sbExh
eWVyUG9zaXRpb24ueSArIHNjcm9sbE9yaWdpbigpLnkoKSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5n
VHJlZU5vZGVNYWM6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3Np
dGlvbikKK3sKKyAgICBJbnRQb2ludCBuZXdTY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9u
OworICAgIG5ld1Njcm9sbFBvc2l0aW9uID0gbmV3U2Nyb2xsUG9zaXRpb24uc2hydW5rVG8obWF4
aW11bVNjcm9sbFBvc2l0aW9uKCkpOworICAgIG5ld1Njcm9sbFBvc2l0aW9uID0gbmV3U2Nyb2xs
UG9zaXRpb24uZXhwYW5kZWRUbyhtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSk7CisKKyAgICBzZXRT
Y3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKG5ld1Njcm9sbFBvc2l0
aW9uKTsKKworICAgIGlmIChzY3JvbGxpbmdUcmVlKCktPnNjcm9sbGluZ1BlcmZvcm1hbmNlTG9n
Z2luZ0VuYWJsZWQoKSkKKyAgICAgICAgbG9nRXhwb3NlZFVuZmlsbGVkQXJlYSgpOworfQorCit2
b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpzZXRTY3JvbGxQb3NpdGlvbldpdGhvdXRDb250ZW50
RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKK3sKKyAgICB1
cGRhdGVNYWluRnJhbWVQaW5TdGF0ZShzY3JvbGxQb3NpdGlvbik7CisKKyAgICBpZiAoc2hvdWxk
VXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpKSB7CisgICAgICAgIG1fcHJv
YmFibGVNYWluVGhyZWFkU2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKKyAgICAgICAg
c2Nyb2xsaW5nVHJlZSgpLT51cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExh
eWVyUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgc2V0U2Nyb2xsTGF5ZXJQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CisgICAgc2Nyb2xsaW5n
VHJlZSgpLT51cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7Cit9
CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OnNldFNjcm9sbExheWVyUG9zaXRpb24oY29u
c3QgSW50UG9pbnQmIHBvc2l0aW9uKQoreworICAgIEFTU0VSVCghc2hvdWxkVXBkYXRlU2Nyb2xs
TGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpKTsKKyAgICBtX3Njcm9sbExheWVyLmdldCgpLnBv
c2l0aW9uID0gQ0dQb2ludE1ha2UoLXBvc2l0aW9uLngoKSArIHNjcm9sbE9yaWdpbigpLngoKSwg
LXBvc2l0aW9uLnkoKSArIHNjcm9sbE9yaWdpbigpLnkoKSk7Cit9CisKK0ludFBvaW50IFNjcm9s
bGluZ1RyZWVOb2RlTWFjOjptaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAoreworICAgIHJl
dHVybiBJbnRQb2ludCgwLCAwKTsKK30KKworSW50UG9pbnQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6
Om1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgcG9zaXRpb24o
Y29udGVudHNTaXplKCkud2lkdGgoKSAtIHZpZXdwb3J0UmVjdCgpLndpZHRoKCksCisgICAgICAg
ICAgICAgICAgICAgICAgY29udGVudHNTaXplKCkuaGVpZ2h0KCkgLSB2aWV3cG9ydFJlY3QoKS5o
ZWlnaHQoKSk7CisKKyAgICBwb3NpdGlvbi5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisKKyAgICBy
ZXR1cm4gcG9zaXRpb247Cit9CisKK3ZvaWQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OnNjcm9sbEJ5
KGNvbnN0IEludFNpemUmIG9mZnNldCkKK3sKKyAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQ
b3NpdGlvbigpICsgb2Zmc2V0KTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6c2Ny
b2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBJbnRTaXplJiBvZmZzZXQp
Cit7CisgICAgc2V0U2Nyb2xsUG9zaXRpb25XaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhz
Y3JvbGxQb3NpdGlvbigpICsgb2Zmc2V0KTsKK30KKwordm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1h
Yzo6dXBkYXRlTWFpbkZyYW1lUGluU3RhdGUoY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9u
KQoreworICAgIGJvb2wgcGlubmVkVG9UaGVMZWZ0ID0gc2Nyb2xsUG9zaXRpb24ueCgpIDw9IG1p
bmltdW1TY3JvbGxQb3NpdGlvbigpLngoKTsKKyAgICBib29sIHBpbm5lZFRvVGhlUmlnaHQgPSBz
Y3JvbGxQb3NpdGlvbi54KCkgPj0gbWF4aW11bVNjcm9sbFBvc2l0aW9uKCkueCgpOworCisgICAg
c2Nyb2xsaW5nVHJlZSgpLT5zZXRNYWluRnJhbWVQaW5TdGF0ZShwaW5uZWRUb1RoZUxlZnQsIHBp
bm5lZFRvVGhlUmlnaHQpOworfQorCit2b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpsb2dFeHBv
c2VkVW5maWxsZWRBcmVhKCkKK3sKKyAgICBSZWdpb24gcGFpbnRlZFZpc2libGVUaWxlczsKKwor
ICAgIERlcXVlPENBTGF5ZXIqPiBsYXllclF1ZXVlOworICAgIGxheWVyUXVldWUuYXBwZW5kKG1f
c2Nyb2xsTGF5ZXIuZ2V0KCkpOworICAgIFdlYlRpbGVMYXllckxpc3QgdGlsZXM7CisKKyAgICB3
aGlsZSghbGF5ZXJRdWV1ZS5pc0VtcHR5KCkgJiYgdGlsZXMuaXNFbXB0eSgpKSB7CisgICAgICAg
IENBTGF5ZXIqIGxheWVyID0gbGF5ZXJRdWV1ZS50YWtlRmlyc3QoKTsKKyAgICAgICAgTlNBcnJh
eSogc3VibGF5ZXJzID0gW1tsYXllciBzdWJsYXllcnNdIGNvcHldOworCisgICAgICAgIC8vIElm
IHRoaXMgbGF5ZXIgaXMgdGhlIHBhcmVudCBvZiBhIHRpbGUsIGl0IGlzIHRoZSBwYXJlbnQgb2Yg
YWxsIG9mIHRoZSB0aWxlcyBhbmQgbm90aGluZyBlbHNlLgorICAgICAgICBpZiAoW1tzdWJsYXll
cnMgb2JqZWN0QXRJbmRleDowXSBpc0tpbmRPZkNsYXNzOltXZWJUaWxlTGF5ZXIgY2xhc3NdXSkg
eworICAgICAgICAgICAgZm9yIChDQUxheWVyKiBzdWJsYXllciBpbiBzdWJsYXllcnMpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoW3N1YmxheWVyIGlzS2luZE9mQ2xhc3M6W1dlYlRpbGVMYXll
ciBjbGFzc11dKTsKKyAgICAgICAgICAgICAgICB0aWxlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8V2Vi
VGlsZUxheWVyKj4oc3VibGF5ZXIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGZvciAoQ0FMYXllciogc3VibGF5ZXIgaW4gc3VibGF5ZXJzKQorICAgICAg
ICAgICAgICAgIGxheWVyUXVldWUuYXBwZW5kKHN1YmxheWVyKTsKKyAgICAgICAgfQorCisgICAg
ICAgIFtzdWJsYXllcnMgcmVsZWFzZV07CisgICAgfQorCisgICAgSW50UG9pbnQgc2Nyb2xsUG9z
aXRpb24gPSB0aGlzLT5zY3JvbGxQb3NpdGlvbigpOworICAgIHVuc2lnbmVkIHVuZmlsbGVkQXJl
YSA9IFRpbGVDYWNoZTo6YmxhbmtQaXhlbENvdW50Rm9yVGlsZXModGlsZXMsIHZpZXdwb3J0UmVj
dCgpLCBJbnRQb2ludCgtc2Nyb2xsUG9zaXRpb24ueCgpLCAtc2Nyb2xsUG9zaXRpb24ueSgpKSk7
CisKKyAgICBpZiAodW5maWxsZWRBcmVhKQorICAgICAgICBXVEZMb2dBbHdheXMoIlNDUk9MTElO
RzogRXhwb3NlZCB0aWxlbGVzcyBhcmVhLiBUaW1lOiAlZiBVbmZpbGxlZCBQaXhlbHM6ICV1XG4i
LCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLCB1bmZpbGxlZEFyZWEpOworfQor
CitzdGF0aWMgdm9pZCBsb2dUaHJlYWRlZFNjcm9sbGluZ01vZGUodW5zaWduZWQgbWFpblRocmVh
ZFNjcm9sbGluZ1JlYXNvbnMpCit7CisgICAgaWYgKG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25z
KSB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgcmVhc29uc0Rlc2NyaXB0aW9uOworCisgICAgICAg
IGlmIChtYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyAmIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpG
b3JjZWRPbk1haW5UaHJlYWQpCisgICAgICAgICAgICByZWFzb25zRGVzY3JpcHRpb24uYXBwZW5k
KCJmb3JjZWQsIik7CisgICAgICAgIGlmIChtYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyAmIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpIYXNTbG93UmVwYWludE9iamVjdHMpCisgICAgICAgICAgICBy
ZWFzb25zRGVzY3JpcHRpb24uYXBwZW5kKCJzbG93LXJlcGFpbnQgb2JqZWN0cywiKTsKKyAgICAg
ICAgaWYgKG1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zICYgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
Okhhc1ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzV2l0aG91dFN1cHBvcnRpbmdGaXhlZExheWVy
cykKKyAgICAgICAgICAgIHJlYXNvbnNEZXNjcmlwdGlvbi5hcHBlbmQoInZpZXdwb3J0LWNvbnN0
cmFpbmVkIG9iamVjdHMsIik7CisgICAgICAgIGlmIChtYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29u
cyAmIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpIYXNOb25MYXllckZpeGVkT2JqZWN0cykKKyAgICAg
ICAgICAgIHJlYXNvbnNEZXNjcmlwdGlvbi5hcHBlbmQoIm5vbi1sYXllciB2aWV3cG9ydC1jb25z
dHJhaW5lZCBvYmplY3RzLCIpOworICAgICAgICBpZiAobWFpblRocmVhZFNjcm9sbGluZ1JlYXNv
bnMgJiBTY3JvbGxpbmdDb29yZGluYXRvcjo6SXNJbWFnZURvY3VtZW50KQorICAgICAgICAgICAg
cmVhc29uc0Rlc2NyaXB0aW9uLmFwcGVuZCgiaW1hZ2UgZG9jdW1lbnQsIik7CisKKyAgICAgICAg
Ly8gU3RyaXAgdGhlIHRyYWlsaW5nIGNvbW1hLgorICAgICAgICBTdHJpbmcgcmVhc29uc0Rlc2Ny
aXB0aW9uVHJpbW1lZCA9IHJlYXNvbnNEZXNjcmlwdGlvbi50b1N0cmluZygpLmxlZnQocmVhc29u
c0Rlc2NyaXB0aW9uLmxlbmd0aCgpIC0gMSk7CisKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJTQ1JP
TExJTkc6IFN3aXRjaGluZyB0byBtYWluLXRocmVhZCBzY3JvbGxpbmcgbW9kZS4gVGltZTogJWYg
UmVhc29uKHMpOiAlc1xuIiwgV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSwgcmVh
c29uc0Rlc2NyaXB0aW9uVHJpbW1lZC5hc2NpaSgpLmRhdGEoKSk7CisgICAgfSBlbHNlCisgICAg
ICAgIFdURkxvZ0Fsd2F5cygiU0NST0xMSU5HOiBTd2l0Y2hpbmcgdG8gdGhyZWFkZWQgc2Nyb2xs
aW5nIG1vZGUuIFRpbWU6ICVmXG4iLCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFRIUkVB
REVEX1NDUk9MTElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9T
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0J
KHJldmlzaW9uIDEzMTEzNikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9T
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQsNyAr
MjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3JvbGxpbmdU
cmVlTm9kZU1hYy5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLmgi
CiAKICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQogCkBAIC00NSwyNiArNDUsMjcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgdm9pZCBsb2dUaHJlYWRlZFNjcm9sbGluZ01v
ZGUodW5zaWduZWQgbWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMpOwogCi1QYXNzT3duUHRyPFNj
cm9sbGluZ1RyZWVOb2RlPiBTY3JvbGxpbmdUcmVlTm9kZTo6Y3JlYXRlKFNjcm9sbGluZ1RyZWUq
IHNjcm9sbGluZ1RyZWUpCitQYXNzT3duUHRyPFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlPiBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZTo6Y3JlYXRlKFNjcm9sbGluZ1RyZWUqIHNjcm9sbGlu
Z1RyZWUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxpbmdUcmVlTm9kZU1hYyhz
Y3JvbGxpbmdUcmVlKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZU1hYyhzY3JvbGxpbmdUcmVlKSk7CiB9CiAKLVNjcm9sbGluZ1RyZWVOb2RlTWFj
OjpTY3JvbGxpbmdUcmVlTm9kZU1hYyhTY3JvbGxpbmdUcmVlKiBzY3JvbGxpbmdUcmVlKQotICAg
IDogU2Nyb2xsaW5nVHJlZU5vZGUoc2Nyb2xsaW5nVHJlZSkKK1Njcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlTWFjOjpTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYyhTY3JvbGxpbmdUcmVlKiBz
Y3JvbGxpbmdUcmVlKQorICAgIDogU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUoc2Nyb2xsaW5n
VHJlZSkKICAgICAsIG1fc2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIodGhpcykKIHsKIH0KIAot
U2Nyb2xsaW5nVHJlZU5vZGVNYWM6On5TY3JvbGxpbmdUcmVlTm9kZU1hYygpCitTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZU1hYzo6flNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjKCkKIHsK
ICAgICBpZiAobV9zbmFwUnViYmVyYmFuZFRpbWVyKQogICAgICAgICBDRlJ1bkxvb3BUaW1lcklu
dmFsaWRhdGUobV9zbmFwUnViYmVyYmFuZFRpbWVyLmdldCgpKTsKIH0KIAotdm9pZCBTY3JvbGxp
bmdUcmVlTm9kZU1hYzo6dXBkYXRlKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGUp
Cit2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjp1cGRhdGUoU2Nyb2xsaW5nU3Rh
dGVOb2RlKiBzdGF0ZU5vZGUpCiB7Ci0gICAgU2Nyb2xsaW5nVHJlZU5vZGU6OnVwZGF0ZShzdGF0
ZSk7CisgICAgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGU6OnVwZGF0ZShzdGF0ZU5vZGUpOwor
ICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGUgPSB0b1Njcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZShzdGF0ZU5vZGUpOwogCiAgICAgaWYgKHN0YXRlLT5zY3JvbGxMYXllckRp
ZENoYW5nZSgpKQogICAgICAgICBtX3Njcm9sbExheWVyID0gc3RhdGUtPnBsYXRmb3JtU2Nyb2xs
TGF5ZXIoKTsKQEAgLTk0LDcgKzk1LDcgQEAgdm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6dXBk
YXRlKFNjcm9sbAogICAgIH0KIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6aGFuZGxl
V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQpCit2b2lkIFNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRm
b3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCkKIHsKICAgICBpZiAoIWNhbkhhdmVTY3JvbGxiYXJz
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwMyw3ICsxMDQsNyBAQCB2b2lkIFNjcm9sbGluZ1Ry
ZWVOb2RlTWFjOjpoYW5kbGVXaGVlbEV2CiAgICAgc2Nyb2xsaW5nVHJlZSgpLT5oYW5kbGVXaGVl
bEV2ZW50UGhhc2Uod2hlZWxFdmVudC5waGFzZSgpKTsKIH0KIAotYm9vbCBTY3JvbGxpbmdUcmVl
Tm9kZU1hYzo6YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKQorYm9vbCBTY3JvbGxpbmdUcmVl
U2Nyb2xsaW5nTm9kZU1hYzo6YWxsb3dzSG9yaXpvbnRhbFN0cmV0Y2hpbmcoKQogewogICAgIHN3
aXRjaCAoaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKSkgewogICAgIGNhc2UgU2Nyb2xsRWxh
c3RpY2l0eUF1dG9tYXRpYzoKQEAgLTExOCw3ICsxMTksNyBAQCBib29sIFNjcm9sbGluZ1RyZWVO
b2RlTWFjOjphbGxvd3NIb3Jpem9uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNjcm9s
bGluZ1RyZWVOb2RlTWFjOjphbGxvd3NWZXJ0aWNhbFN0cmV0Y2hpbmcoKQorYm9vbCBTY3JvbGxp
bmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6YWxsb3dzVmVydGljYWxTdHJldGNoaW5nKCkKIHsKICAg
ICBzd2l0Y2ggKHZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSgpKSB7CiAgICAgY2FzZSBTY3JvbGxF
bGFzdGljaXR5QXV0b21hdGljOgpAQCAtMTMzLDcgKzEzNCw3IEBAIGJvb2wgU2Nyb2xsaW5nVHJl
ZU5vZGVNYWM6OmFsbG93c1ZlcnRpY2EKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUludFNpemUg
U2Nyb2xsaW5nVHJlZU5vZGVNYWM6OnN0cmV0Y2hBbW91bnQoKQorSW50U2l6ZSBTY3JvbGxpbmdU
cmVlU2Nyb2xsaW5nTm9kZU1hYzo6c3RyZXRjaEFtb3VudCgpCiB7CiAgICAgSW50U2l6ZSBzdHJl
dGNoOwogCkBAIC0xNTAsNyArMTUxLDcgQEAgSW50U2l6ZSBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6
c3RyZXRjaEFtbwogICAgIHJldHVybiBzdHJldGNoOwogfQogCi1ib29sIFNjcm9sbGluZ1RyZWVO
b2RlTWFjOjpwaW5uZWRJbkRpcmVjdGlvbihjb25zdCBGbG9hdFNpemUmIGRlbHRhKQorYm9vbCBT
Y3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6cGlubmVkSW5EaXJlY3Rpb24oY29uc3QgRmxv
YXRTaXplJiBkZWx0YSkKIHsKICAgICBGbG9hdFNpemUgbGltaXREZWx0YTsKIApAQCAtMTc4LDE3
ICsxNzksMTcgQEAgYm9vbCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6cGlubmVkSW5EaXJlYwogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6Y2FuU2Nyb2xs
SG9yaXpvbnRhbGx5KCkKK2Jvb2wgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OmNhblNj
cm9sbEhvcml6b250YWxseSgpCiB7CiAgICAgcmV0dXJuIGhhc0VuYWJsZWRIb3Jpem9udGFsU2Ny
b2xsYmFyKCk7CiB9CiAKLWJvb2wgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OmNhblNjcm9sbFZlcnRp
Y2FsbHkoKQorYm9vbCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6Y2FuU2Nyb2xsVmVy
dGljYWxseSgpCiB7CiAgICAgcmV0dXJuIGhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcigpOwog
fQogCi1ib29sIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpzaG91bGRSdWJiZXJCYW5kSW5EaXJlY3Rp
b24oU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbikKK2Jvb2wgU2Nyb2xsaW5nVHJlZVNjcm9sbGlu
Z05vZGVNYWM6OnNob3VsZFJ1YmJlckJhbmRJbkRpcmVjdGlvbihTY3JvbGxEaXJlY3Rpb24gZGly
ZWN0aW9uKQogewogICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCkKICAgICAgICAgcmV0
dXJuICFzY3JvbGxpbmdUcmVlKCktPmNhbkdvQmFjaygpOwpAQCAtMTk5LDIyICsyMDAsMjIgQEAg
Ym9vbCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6c2hvdWxkUnViYmVyQgogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotSW50UG9pbnQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OmFic29sdXRlU2Nyb2xsUG9z
aXRpb24oKQorSW50UG9pbnQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OmFic29sdXRl
U2Nyb2xsUG9zaXRpb24oKQogewogICAgIHJldHVybiBzY3JvbGxQb3NpdGlvbigpOwogfQogCi12
b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjppbW1lZGlhdGVTY3JvbGxCeShjb25zdCBGbG9hdFNp
emUmIG9mZnNldCkKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OmltbWVkaWF0
ZVNjcm9sbEJ5KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQogewogICAgIHNjcm9sbEJ5KHJvdW5k
ZWRJbnRTaXplKG9mZnNldCkpOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjppbW1l
ZGlhdGVTY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEZsb2F0U2l6
ZSYgb2Zmc2V0KQordm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6aW1tZWRpYXRl
U2Nyb2xsQnlXaXRob3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBGbG9hdFNpemUmIG9m
ZnNldCkKIHsKICAgICBzY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKHJvdW5k
ZWRJbnRTaXplKG9mZnNldCkpOwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpzdGFy
dFNuYXBSdWJiZXJiYW5kVGltZXIoKQordm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1h
Yzo6c3RhcnRTbmFwUnViYmVyYmFuZFRpbWVyKCkKIHsKICAgICBBU1NFUlQoIW1fc25hcFJ1YmJl
cmJhbmRUaW1lcik7CiAKQEAgLTIyNiw3ICsyMjcsNyBAQCB2b2lkIFNjcm9sbGluZ1RyZWVOb2Rl
TWFjOjpzdGFydFNuYXBSdWJiCiAgICAgQ0ZSdW5Mb29wQWRkVGltZXIoQ0ZSdW5Mb29wR2V0Q3Vy
cmVudCgpLCBtX3NuYXBSdWJiZXJiYW5kVGltZXIuZ2V0KCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9k
ZSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OnN0b3BTbmFwUnViYmVyYmFuZFRp
bWVyKCkKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OnN0b3BTbmFwUnViYmVy
YmFuZFRpbWVyKCkKIHsKICAgICBpZiAoIW1fc25hcFJ1YmJlcmJhbmRUaW1lcikKICAgICAgICAg
cmV0dXJuOwpAQCAtMjM1LDcgKzIzNiw3IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OnN0
b3BTbmFwUnViYmUKICAgICBtX3NuYXBSdWJiZXJiYW5kVGltZXIgPSBudWxscHRyOwogfQogCi1J
bnRQb2ludCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6c2Nyb2xsUG9zaXRpb24oKSBjb25zdAorSW50
UG9pbnQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OnNjcm9sbFBvc2l0aW9uKCkgY29u
c3QKIHsKICAgICBpZiAoc2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVh
ZCgpKQogICAgICAgICByZXR1cm4gbV9wcm9iYWJsZU1haW5UaHJlYWRTY3JvbGxQb3NpdGlvbjsK
QEAgLTI0NCw3ICsyNDUsNyBAQCBJbnRQb2ludCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6c2Nyb2xs
UG9zCiAgICAgcmV0dXJuIEludFBvaW50KC1zY3JvbGxMYXllclBvc2l0aW9uLnggKyBzY3JvbGxP
cmlnaW4oKS54KCksIC1zY3JvbGxMYXllclBvc2l0aW9uLnkgKyBzY3JvbGxPcmlnaW4oKS55KCkp
OwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjpzZXRTY3JvbGxQb3NpdGlvbihjb25z
dCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCit2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlTWFjOjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24p
CiB7CiAgICAgSW50UG9pbnQgbmV3U2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsKICAg
ICBuZXdTY3JvbGxQb3NpdGlvbiA9IG5ld1Njcm9sbFBvc2l0aW9uLnNocnVua1RvKG1heGltdW1T
Y3JvbGxQb3NpdGlvbigpKTsKQEAgLTI1Niw3ICsyNTcsNyBAQCB2b2lkIFNjcm9sbGluZ1RyZWVO
b2RlTWFjOjpzZXRTY3JvbGxQb3NpCiAgICAgICAgIGxvZ0V4cG9zZWRVbmZpbGxlZEFyZWEoKTsK
IH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6c2V0U2Nyb2xsUG9zaXRpb25XaXRob3V0
Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCit2
b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpzZXRTY3JvbGxQb3NpdGlvbldpdGhv
dXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikK
IHsKICAgICB1cGRhdGVNYWluRnJhbWVQaW5TdGF0ZShzY3JvbGxQb3NpdGlvbik7CiAKQEAgLTI3
MCwxOCArMjcxLDE4IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OnNldFNjcm9sbFBvc2kK
ICAgICBzY3JvbGxpbmdUcmVlKCktPnVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKHNjcm9s
bFBvc2l0aW9uKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6c2V0U2Nyb2xsTGF5
ZXJQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgcG9zaXRpb24pCit2b2lkIFNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlTWFjOjpzZXRTY3JvbGxMYXllclBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBw
b3NpdGlvbikKIHsKICAgICBBU1NFUlQoIXNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25P
bk1haW5UaHJlYWQoKSk7CiAgICAgbV9zY3JvbGxMYXllci5nZXQoKS5wb3NpdGlvbiA9IENHUG9p
bnRNYWtlKC1wb3NpdGlvbi54KCkgKyBzY3JvbGxPcmlnaW4oKS54KCksIC1wb3NpdGlvbi55KCkg
KyBzY3JvbGxPcmlnaW4oKS55KCkpOwogfQogCi1JbnRQb2ludCBTY3JvbGxpbmdUcmVlTm9kZU1h
Yzo6bWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKK0ludFBvaW50IFNjcm9sbGluZ1RyZWVT
Y3JvbGxpbmdOb2RlTWFjOjptaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdAogewogICAgIHJl
dHVybiBJbnRQb2ludCgwLCAwKTsKIH0KIAotSW50UG9pbnQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6
Om1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNvbnN0CitJbnRQb2ludCBTY3JvbGxpbmdUcmVlU2Ny
b2xsaW5nTm9kZU1hYzo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKIHsKICAgICBJbnRQ
b2ludCBwb3NpdGlvbihjb250ZW50c1NpemUoKS53aWR0aCgpIC0gdmlld3BvcnRSZWN0KCkud2lk
dGgoKSwKICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50c1NpemUoKS5oZWlnaHQoKSAtIHZp
ZXdwb3J0UmVjdCgpLmhlaWdodCgpKTsKQEAgLTI5MSwxNyArMjkyLDE3IEBAIEludFBvaW50IFNj
cm9sbGluZ1RyZWVOb2RlTWFjOjptYXhpbXVtU2MKICAgICByZXR1cm4gcG9zaXRpb247CiB9CiAK
LXZvaWQgU2Nyb2xsaW5nVHJlZU5vZGVNYWM6OnNjcm9sbEJ5KGNvbnN0IEludFNpemUmIG9mZnNl
dCkKK3ZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OnNjcm9sbEJ5KGNvbnN0IElu
dFNpemUmIG9mZnNldCkKIHsKICAgICBzZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbigp
ICsgb2Zmc2V0KTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6c2Nyb2xsQnlXaXRo
b3V0Q29udGVudEVkZ2VDb25zdHJhaW50cyhjb25zdCBJbnRTaXplJiBvZmZzZXQpCit2b2lkIFNj
cm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjOjpzY3JvbGxCeVdpdGhvdXRDb250ZW50RWRnZUNv
bnN0cmFpbnRzKGNvbnN0IEludFNpemUmIG9mZnNldCkKIHsKICAgICBzZXRTY3JvbGxQb3NpdGlv
bldpdGhvdXRDb250ZW50RWRnZUNvbnN0cmFpbnRzKHNjcm9sbFBvc2l0aW9uKCkgKyBvZmZzZXQp
OwogfQogCi12b2lkIFNjcm9sbGluZ1RyZWVOb2RlTWFjOjp1cGRhdGVNYWluRnJhbWVQaW5TdGF0
ZShjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCit2b2lkIFNjcm9sbGluZ1RyZWVTY3Jv
bGxpbmdOb2RlTWFjOjp1cGRhdGVNYWluRnJhbWVQaW5TdGF0ZShjb25zdCBJbnRQb2ludCYgc2Ny
b2xsUG9zaXRpb24pCiB7CiAgICAgYm9vbCBwaW5uZWRUb1RoZUxlZnQgPSBzY3JvbGxQb3NpdGlv
bi54KCkgPD0gbWluaW11bVNjcm9sbFBvc2l0aW9uKCkueCgpOwogICAgIGJvb2wgcGlubmVkVG9U
aGVSaWdodCA9IHNjcm9sbFBvc2l0aW9uLngoKSA+PSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKS54
KCk7CkBAIC0zMDksNyArMzEwLDcgQEAgdm9pZCBTY3JvbGxpbmdUcmVlTm9kZU1hYzo6dXBkYXRl
TWFpbkZyYQogICAgIHNjcm9sbGluZ1RyZWUoKS0+c2V0TWFpbkZyYW1lUGluU3RhdGUocGlubmVk
VG9UaGVMZWZ0LCBwaW5uZWRUb1RoZVJpZ2h0KTsKIH0KIAotdm9pZCBTY3JvbGxpbmdUcmVlTm9k
ZU1hYzo6bG9nRXhwb3NlZFVuZmlsbGVkQXJlYSgpCit2b2lkIFNjcm9sbGluZ1RyZWVTY3JvbGxp
bmdOb2RlTWFjOjpsb2dFeHBvc2VkVW5maWxsZWRBcmVhKCkKIHsKICAgICBSZWdpb24gcGFpbnRl
ZFZpc2libGVUaWxlczsKIAo=
</data>
<flag name="review"
          id="181586"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>